嵌套关联rails方式

时间:2012-04-07 14:03:09

标签: ruby-on-rails activerecord associations

我对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来实现这一点,但我想确保数据库独立性,我希望以#34; Rails方式执行此操作。&#34;

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用has_many :through关联:

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

答案 1 :(得分: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

要获取sophiasophia.comments

留下的所有评论

要在sophia的帖子中留下所有评论:sophia.responses

请参阅options for has_many(特别是throughsource