我很難理解如何在Rails中實現單一模型自我加入。 Guide to ActiveRecord Associations section 2.10簡要解釋了自加入,但沒有提供足夠的信息,並且每個關於此的例子或帖子都引用了友情朋友鐵路廣播示例,它不是單個模型自加入,如Rails Guide section 2.10中所述。瞭解Rails ActiveRecord「單一模式」自我加入
這個想法是has_many和belongs_to本身的模型,不需要單獨的關係表。我看到需要一個單獨的表的唯一原因是,如果你想要關係包含更多的信息,而不僅僅是關係。例如「最好的朋友」,「幾乎不知道他們」
我有一個簡單的帖子模式:
create_table "posts", :force => true do |t|
t.datetime "posted"
t.string "nick"
t.string "title"
t.text "content"
t.integer "parent_post_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
的parent_post_id是自參考其他帖子POST_ID的。該posts.rb模型定義的關係:
class Post < ActiveRecord::Base
has_many :replies, :class_name => "Post"
belongs_to :parent_post, :class_name => "Post",
:foreign_key => "parent_post_id"
end
在控制器或查看我希望能夠做這樣的事情:
@posts.each do |post|
...
@replies = post.replies
@replies.each do |reply|
...
end
end
或查找後的父:
@parent_post = post.parent_post
這可能都是一些語法誤解。所以,先感謝任何能給我帶來一些意識的人。我已經瀏覽了每篇SO和博客文章,並且沒有嘗試使用「指南」中描述的單一模型自引用自連接方法。
任何人提供的解釋沒有指向使用單獨關係表的Friendly Friend示例的積分。
它會更容易,如果你所描述的是/沒有發生你所期望的方式上手。此外,像'act_as_tree'是單表,單一模式的自我指涉的 - 你有沒有考慮在尋找類似的東西? – 2012-02-12 16:55:46
我以爲我做到了。我期待能夠調用post.replies,並得到一組是基於父後填充後的實例,通過它的parent_post_id = POST_ID。 – garlicman 2012-02-12 17:00:42
這解釋了你做了什麼。沒有發生什麼事。 – 2012-02-12 17:02:50