我是 Rails 的新手,正在努力获取要保存的格式 - 数据库不断回滚插入而没有任何明显的解释。
我有一个 PublishedItem 和一个引用。每个 PublishedItem 可以通过 Citation 对其他 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 作为被引用_published_item 和新 PublishedItem 作为 citing_published_item 的记录插入到引文中。但我很难过。每当我在选择列表中选择一个 PublishedItem 时,查询都会回滚。作者身份(和其他 M:M)正常工作。
非常感谢任何帮助。