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
またはPOSTの親を見つける:
を@parent_post = post.parent_post
これは構文が誤っている可能性があります。だから私にいくつかの意味を打つことができる誰にも事前に感謝します。私はSOとブログの投稿をすべて見てきましたが、ガイドに記載されている単一モデルの自己参照自己結合メソッドを試してみません。
別の関係テーブルを使用するフレンドリーフレンドの例を指していない説明を提供する人のためのポイント。
期待どおりのことが起こっているかどうかを記述しておけば、簡単に始めることができます。また、 'act_as_tree'のようなものは、単一テーブル、単一モデルの自己参照型です。あなたはそのようなものを見ることを考えましたか? –
私は思った。私は、post.repliesを呼び出して、parent_post_id = post_idによって、親投稿に基づいて作成された一連のPostインスタンスを取得できることを期待していました。 – garlicman
それはあなたがしたことを説明します。何が起こったか –