如何让 Rails 关联使用特定名称访问不同名称的模型?

How do I get a Rails association to use a certain name to access a model of a different name?

假设我有一个用户模型和一个电影模型以及 table 来存储它们。假设我想通过添加名为 watchlist_movies 的第三个 table 来添加监视列表功能,它只是将 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 return 的记录,第二个结果是 return user.movies 的电影记录集合。本质上我想要的是 user.watchlist_movies 到 return 电影记录的集合,所以我想要第一个关系中定义的访问权限 return 第二个关系的内容。我该怎么做?

您在这里正确定义了关系,但您的期望可能与 Rails 做事的方式不一致。如果您的结构是 Movie 通过 WatchlistMovie 与 User 相关联,这是一个简单的连接模型,那么您就走对了。

请记住,您可以随心所欲地称呼您的关系:

has_many :watchlist_movie_associations,
  class_name: 'WatchlistMovie'

has_many :watchlist_movies,
  class_name: 'Movie',
  through: :watchlist_movie_associations

我建议不要这样做,因为它违背了 ActiveRecord 喜欢命名事物的方式。如果它现在只是困扰您,那是可以理解的,但如果您接受这种风格而不是与之抗争,您将拥有一个更加一致和易于理解的应用程序。