Rails:如何通过 has_many 进行优雅的调用
Posted
技术标签:
【中文标题】Rails:如何通过 has_many 进行优雅的调用【英文标题】:Rails: how to make elegant calls with has_many through 【发布时间】:2015-11-24 21:47:11 【问题描述】:我有一个 User 模型、一个 Movie 模型和一个 MovieRatings 模型。用户通过 MovieRatings 拥有_many Movies,反之亦然。
电影分级具有 user_id、movie_id 和 Wants_to_see。 want_to_see 是一个布尔值。有没有一种简单的方法可以获取用户想要的电影列表,其中 want_to_see = true?
user.movies.where(wants_to_see: true)
给我一个 AssociationRelation 对象。 user.movie_ratings.where(wants_to_see: true)
给我一个 MovieRating 对象的列表,然后我需要找到相关的电影。
实现这一目标的最佳方法是什么?
【问题讨论】:
【参考方案1】:您可以通过多种方式实现这一目标。你可以创建一个函数来返回用户想要的电影
class User < ActiveRecord::Base
has_many :movie_ratings
has_many :movies, through: :movie_ratings
def wants_to_see_movies
self.movies.where(movie_ratings: wants_to_see: true )
end
end
或者,您可以使用 has_many
为“想看”的电影创建一个附加关联
class User < ActiveRecord::Base
has_many :movie_ratings
has_many :movies, through: :movie_ratings
has_many :wants_to_see_movies, -> where(movie_ratings: wants_to_see: true ) ,
through: :movie_ratings,
source: movie
end
end
坦率地说,我不确定哪种解决方案更好/更值得推荐,但无论哪种情况,当您想要获取用户想看的所有电影时,
@movies = @user.wants_to_see_movies
【讨论】:
太棒了,谢谢!我不确定我的关联设置中是否遗漏了什么 没问题!我很乐意提供帮助。以上是关于Rails:如何通过 has_many 进行优雅的调用的主要内容,如果未能解决你的问题,请参考以下文章