私はRailsを初めて使用し、保存するformtasticフォームを取得するのに苦労しています.データベースは、明確な説明なしに挿入をロールバックし続けます.
PublishedItem と Citation があります。各 PublishedItem は、Citation を介して他の PublishedItems への多くの参照を持つことができます。
class PublishedItem < ActiveRecord::Base
attr_accessible :date_published,
:author_ids,
:cited_published_item_ids,
:citing_published_item_ids
has_many :authorships
has_many :authors, through: :authorships, order: "last_name, first_name"
has_many :citations,
foreign_key: "citing_published_item_id",
class_name: "Citation",
dependent: :destroy
has_many :cited_published_items,
through: :citations,
source: :cited
has_many :reverse_citations,
foreign_key: "cited_published_item_id",
class_name: "Citation",
dependent: :destroy
has_many :citing_published_items,
through: :reverse_citations,
source: :citing
他にも関係がありますが、比較の目的で 1 つだけ含めました: Authorship 関係、別のテーブルへのより典型的な関係、Authors は適切に保存します。私が問題を抱えているのは、自己参照のみです。
引用モデルは次のとおりです。
class Citation < ActiveRecord::Base
attr_accessible :citation_type, :cited_id, :citing_id
belongs_to :citing,
class_name: "PublishedItem",
foreign_key: "citing_published_item_id"
belongs_to :cited,
class_name: "PublishedItem",
foreign_key: "cited_published_item_id"
そしてテーブル(postgresql):
CREATE TABLE citations
(
id serial NOT NULL,
citing_published_item_id integer,
cited_published_item_id integer,
citation_type character varying(255),
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
CONSTRAINT published_item_citations_pkey PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);
new.html.erb フォーム (抜粋):
<%= semantic_form_for @published_item do |f| %>
<%= f.semantic_errors %>
<%= f.inputs do %>
<%= f.input :title %>
<%= f.input :authors, as: :select,
collection: Author.find(:all, order: "last_name ASC, first_name ASC") %>
<%= f.input :cited_published_items, as: :select,
collection: PublishedItem.find(:all, order: "title ASC") %>
<% end %>
<%= f.actions do %>
<%= f.action :submit, button_html: { class: "btn btn-primary" } %>
<%= f.action :cancel, button_html: { class: "btn btn-default" } %>
<% end %>
私が実現したいのですが、達成できないように見えるのは、新しい PublishedItem フォームに渡される別の PublishedItem を参照し、元の PublishedItem をciting_published_item として、新しい PublishedItem を citing_published_item として Citations にレコードを挿入することです。しかし、私は困惑しています。選択リストで PublishedItem を選択するたびに、クエリがロールバックします。オーサーシップ (およびその他の M:M) は適切に機能します。
どんな助けでも大歓迎です。