我有用户,帖子和评论。用户只能向每个帖子发布一条评论。检索给定用户评论的所有帖子,Ruby on Rails
class User < ActiveRecord::Base
has_many :posts
has_many :comments
end
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
end
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
在userpage(http://host/users/1
例如)我想说明在特定用户评论的所有讯息。然后每篇文章将有所有其他评论。
我可以做这样的事情在我的用户控制:
def show
@user = User.find(params[:user_id])
@posts = []
user.comments.each {|comment| @posts << comment.post}
end
这样,我会找到用户,那么他所有的意见,然后相应的后交于每个注释,然后(在我看来),每个发布我将呈现post.comments。我在Rails中是全新的,所以我可以做到这一点=)但我认为它有点不好,有更好的方法来做到这一点,也许我应该使用范围或named_scopes(不知道这是什么,但看起来像害怕)。
那么你能指出我在正确的方向吗?
我不得不承认,我第一次读这本书时迷路了,因为我的思想还停留在“用户 - >帖子 - >评论”的关系上。但是,经过几次审查之后,我对'用户 - >评论 - >帖子'心智模型进行了调整。评论看起来像一个经典的多对多映射模型,然后这一切似乎都很简单! – 2010-10-23 14:09:56
哇!它效果很好。比我想象的更容易。谢谢。 – fetsh 2010-10-23 14:17:18
@爱德华你在指甲上。 'has_many:through =>'与has_and_belongs_to_many'或多或少相同,只是'has_many:through =>'可以让你处理连接关联。这就是常见的用例,尽管它对@ilzoff所做的也很完美。 – 2010-10-23 14:21:47