我在Rails中阅读过很多关于自引用类的内容,但是仍然无法让它们工作。
我有一类文章,我希望他们能够互相引用,从源文章到结果文章 - 然后能够找到相反的结果。所以我正在尝试使用另一个名为Links的类来完成has_many。
我的架构是
create_table "articles", :force => true do |t|
t.string "name"
t.text "body"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "links", :force => true do |t|
t.integer "source_id"
t.integer "outcome_id"
t.string "question"
t.datetime "created_at"
t.datetime "updated_at"
end
模型
class Article < ActiveRecord::Base
has_many :links_as_source, :foreign_key => "source_id", :class_name => "Link"
has_many :sources, :through => :links_as_source
has_many :links_as_outcome, :foreign_key => "outcome_id", :class_name => "Link"
has_many :outcomes, :through => :links_as_outcome
end
和
class Link < ActiveRecord::Base
belongs_to :source, :foreign_key => "source_id", :class_name => "Article"
belongs_to :outcome, :foreign_key => "outcome_id", :class_name => "Article"
end
我可以在控制台中创建文章,我可以使用a.outcomes << b
将文章链接在一起,但链接表只存储outcome_id,而不是source_id。
我做错了什么?
答案 0 :(得分:3)
我最终让这个工作了。我更改了名字 - 我不知道这是否重要。我确实在某个地方读到了这个源是一个愚蠢的名字用于某事。
所以这是有效的:
我的架构
create_table "article_relationships", :force => true do |t|
t.integer "parent_id"
t.integer "child_id"
...
end
create_table "articles", :force => true do |t|
t.string "name"
...
end
我的文章模型
has_many :parent_child_relationships,
:class_name => "ArticleRelationship",
:foreign_key => :child_id,
:dependent => :destroy
has_many :parents,
:through => :parent_child_relationships,
:source => :parent
has_many :child_parent_relationships,
:class_name => "ArticleRelationship",
:foreign_key => :parent_id,
:dependent => :destroy
has_many :children,
:through => :child_parent_relationships,
:source => :child