1

假设我有一个用户模型和一个电影模型以及存储它们的表。假设我想通过添加名为 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.movi​​es 的电影记录集合。基本上我想要的是 user.watchlist_movies 返回电影记录的集合,所以我希望第一个关系中定义的访问返回第二个关系的内容。我该怎么做呢?

4

1 回答 1

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 喜欢命名事物的方式。如果它现在只是困扰您,那是可以理解的,但是如果您接受这种风格而不是反对它,那么您将拥有一个更加一致和易于理解的应用程序。

于 2016-05-01T02:28:10.700 回答