我有以下三种模式:
模型/ user.rb
class User < ActiveRecord::Base
has_many :order_movies
has_many :movies, through: :order_movies
end
模型/ movie.rb
class Movie < ActiveRecord::Base
has_many :order_movies
has_many :user, through: :order_movies
end
模型/ order_movies.rb
class OrderMovie < ActiveRecord::Base
belongs_to :user
belongs_to :movie
end
现在我想要返回从一个特定用户订购的所有电影。
我尝试了以下内容:
def myMovies
@user = User.find(session[:user_id])
@movies = OrderMovie.where(:user_id => @user.id).movie
end
但我收到了这个错误:
undefined method `movie' for #<OrderMovie::ActiveRecord_Relation:0x00000007c38fc8>
在这种情况下我的失败是什么?
谢谢。
答案 0 :(得分:2)
User
对象与movies
的关系通过order_movies
因此,如果您希望特定用户的所有movies
看起来都不超过{{ 1}}。
请阅读有关ActiveRecord关系和多对多关系的更多信息。 http://guides.rubyonrails.org/association_basics.html
答案 1 :(得分:0)
因为你已经告诉Rails User has_many: movies ...
:
@user.movies
答案 2 :(得分:-1)
对不起。
我找到了一个适合我的解决方案:
@moviesOrders = OrderMovie.where(:user_id => @user.id)
@movies = Movie.where(id: @moviesOrders.pluck(:movie_id))
但是有更聪明的方法吗?可能在一行中做到这一点?