0

因此,我的應用程序中有三個模型,一個是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)

感謝

回答

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表示'是',我說'啞巴堅持性'是'不'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並自己處理這些罕見的情況。 –

相關問題