我们说我有一个用户模型和一个电影模型以及存储它们的表格。假设我想通过添加第三个名为watchlist_movies的表来添加监视列表功能,该表只是将user_id映射到movie_id。
我现在要添加一个watchlist_movie模型。我希望能够使用user.watchlist_movies查询ActiveRecord并获取电影对象的集合。到目前为止,我已尝试过(在user.rb中)
has_many :watchlist_movies
和
has_many :movies, through: watchlist_movies
第一个结果是user.watchlist_movies返回记录,第二个结果将返回user.movies上的电影记录集合。基本上我想要的是user.watchlist_movies返回一组电影记录,所以我希望第一个关系中定义的访问返回第二个关系的内容。我该怎么做?
答案 0 :(得分:1)
你在这里正确地定义了这些关系,但是你可能有一个期望与Rails的工作方式不一致的情况。如果您的结构是Movie通过WatchlistMovie与User相关,这是一个简单的连接模型,那么您就是在正确的轨道上。
请记住,您可以随心所欲地打电话给您的人际关系:
has_many :watchlist_movie_associations,
class_name: 'WatchlistMovie'
has_many :watchlist_movies,
class_name: 'Movie',
through: :watchlist_movie_associations
我建议不要这样做,因为它违背了ActiveRecord更喜欢命名的方式。如果它现在只是给你带来麻烦,这是可以理解的,但是如果你接受这种风格而不是对抗它,你将拥有一个更加一致和可理解的应用程序。