在Rails中设置多对多关联的正确方法是什么
问题描述:
因此,我的应用程序中有三个模型,一个是User,Review和一个Movie模型。用户可以查看许多电影(每个电影一个),电影可以有许多用户的许多评论。他们的联系是一个评论。在Rails中设置多对多关联的正确方法是什么
我在做下面的设置吗?
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)
感谢
答
我相信这是你应该考虑
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表示'是',我说'哑巴坚持性'是'不'no ...)
User.reviews
会给你的'加入记录',即沿着<Review user_id=x, movie_id=y>
的线,当然,你会有更多的有关审查的连接表上的列,如:summary, :content
等等。很容易从评论访问电影,即Movie.find_by_id(User.reviews.last.movie_id).title
我总是在数据库中添加一个唯一索引,因为Rails验证并不能保证唯一性,特别是在大量被贩卖的应用上。然后,您可以拯救ActiveRecord :: RecordNotUnique并自己处理这些罕见的情况。 –