在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

+1

我总是在数据库中添加一个唯一索引,因为Rails验证并不能保证唯一性,特别是在大量被贩卖的应用上。然后,您可以拯救ActiveRecord :: RecordNotUnique并自己处理这些罕见的情况。 –