我有一个用户模型,一个电影模型和一个MovieRatings模型。用户通过MovieRatings拥有多部电影,反之亦然。
电影评级具有user_id,movie_id和wants_to_see。 wants_to_see是一个布尔值。是否有一种简单的方法来获取用户的电影列表,其中want_to_see = true?
user.movies.where(wants_to_see: true)
为我提供了一个AssociationRelation对象。 user.movie_ratings.where(wants_to_see: true)
为我提供了一个MovieRating对象列表,然后我需要找到相关的电影。
实现这一目标的最佳方式是什么?
答案 0 :(得分: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