我是Rails的新手,努力獲得一個formtastic形式來保存 - 數據庫在沒有任何明顯解釋的情況下繼續回滾插入。節省自引用多對多關係
我有一個PublishedItem和一個引文。每個PublishedItem可以通過引用具有其他PublishedItems許多參考 - 這裏是(精簡)PublishedItem型號:
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
有其他關係,但我只包括一個用於比較的目的:作者身份的關係,更與另一張表的典型關係,作者保存正確。這只是自我參照的問題。
這裏是引文型號:
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爲referenced_published_item,新的PublishedItem爲citing_published_item。但我很難過。每當我在選擇列表中選擇一個PublishedItem,查詢就會回滾。作者(和其他M:M)正常工作。
任何幫助非常感謝。
看到http://stackoverflow.com/questions/2182428/rails-nested-form-with-has-many-through-how-to-edit-attributes-of-join-model –
謝謝@m_x,但它並沒有真正幫助我 - 當它是同一個對象時,我看不到如何引用關係的另一方。我已經嘗試過所有'@public_item.xxx.build.build_yyy'的組合,並且它們都不起作用。我添加了<%= fields_for:referenced_published_items do | cf | %> ...'並且不能在那裏得到任何喜悅。我幾乎到了將要爲引用和引用出版物分成兩張表格的地步,這將是一個恥辱。 – Alan