2012-04-07 7 views
0

私はかなりRailsに新しいですし、私はどのように私の関連付けのためのRailsフレームワークを活用するのかをよりよく理解しようとしています。入れ子にすると、レールの方法が関連付けられます

私のアプリに固有のものではありませんが、構造は似ています。私の例では、標準的なブログのアソシエイトを使用します。

例モデル:

class Author < ActiveRecord::Base 
    has_many :posts, :through => :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :author 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

私の挑戦は、私は特定の作者に属しているすべてのコメントを選択したいということです。私は特定の作者に属しているすべてのコメントを選択しようとして述べたように

comment_author = Comment.first 
puts comment_author.post.author.name 

しかし:私は、特定のポストに関連している記事や著者の要素を参照する方法を理解しています。私はfind_by_sqlを実行することでこれを達成することができましたが、私はdbの独立性を確保したいので、これを "Railsの方法"にしたいと思います。

ありがとうございます!

答えて

0

あなたはhas_many :through associcationを使用することができます。

class Author < ActiveRecord::Base 
    has_many :posts 
    has_many :comments, :through => :posts 
end 
+0

一度私はhas_many:throughアソシエーションを確立し、特定のコメントを知っています - 同じ著者による他のコメントをすべて見つけるにはどうすればよいですか?例:comment = Comment.first。今私は最初のコメントを書いた作者のコメントの残りを見つけたいと思っています...? 〜助けてくれてありがとう! – Matt

+0

'comment.author.comments'。 – Femaref

0

@Femarefは、あなたの質問に正確な答えを提供し、あなたはそれを受け入れる必要があります。私のものは単なる補完物にすぎません。


著者はここでは、投稿にコメントを残すことができる場合は、あなたがしたいかもしれないものである:

class Author 
    has_many :posts 
    has_many :comments 
    has_many :responses, through: :posts, source: :comments       
end 

class Post 
    belongs_to :author 
    has_many :comments 
end 

class Comment 
    belongs_to :author 
    belongs_to :post 
end 

sophiaが残したすべてのコメントを取得するには:sophia.comments

すべて取得するにはコメントはsophiaの投稿に続きます:sophia.responses

options for has_many(espec灰throughsource

+0

これは完璧ですが、私は少し複雑にすることができます。特定のコメント(comment.id)を知っていて、そのユーザーが他のコメントをすべて一覧にしたいとします。だから私は著者が誰だったかを質問し、その著者による他のコメントをすべて表示しなければならないでしょう。 comment.post.authorを使用して著者を見つけることができます。あなたが言及したように私はauthorname.commentsを使用することができます。私は一回のショットでこれを行う最も効率的な方法を理解しようとしています。基本的にチェーンを歩いて戻ってくる。 – Matt

+0

'comment.author.comments'は、' comment'の著者が残したコメントをすべて返します。それはあなたが探していたものですか? – Damien

関連する問題