0

所以我的应用中有三个模型,一个用户模型、一个评论模型和一个电影模型。一个用户可以评论许多电影(每部电影一个),一个电影可以有许多用户的许多评论。他们的联系是评论。

我在做以下设置吗?

class Movie < ActiveRecord::Base
  has_many :reviews, :through => :users

end

class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
end

class User < ActiveRecord::Base
  has_many :reviews, :through => :movies

end

我希望我可以做类似的事情:

User.reviews(这会让我返回用户的评论和评论相关的电影的相应 ID)

谢谢

4

1 回答 1

1

我相信这是你应该采取的方法

class User < ActiveRecord::Base
  has_many :reviews
  has_many :movies, :through => :reviews
end

class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :movie
end

class Movie < ActiveRecord::Base
  has_many :reviews
  has_many :users, :through => :reviews
end

您还希望验证模型中的唯一性Review和/或在连接表上强制执行唯一性以仅允许每部电影单个用户。如果您也想将此 UQ 约束带入架构,这取决于您(DHH 说“是”,我说“愚蠢的持久性”是“不,不”......)

User.reviews将为您提供“连接记录”,即按照“<Review user_id=x, movie_id=y> 当然,您在连接表上会有更多与评论相关的列,例如:summary, :content等。从评论中访问电影很容易,即Movie.find_by_id(User.reviews.last.movie_id).title

于 2012-06-20T16:21:17.250 回答