我对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;
谢谢!
答案 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
要获取sophia
:sophia.comments
要在sophia
的帖子中留下所有评论:sophia.responses
请参阅options for has_many
(特别是through
和source
)