2016-06-14 25 views
1

我有以下三种模式的所有项目:Rails的发现belongs_to的另一个模型

型号/ 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> 

什么是我在这种情况下,失败?

谢谢。

回答

-1

对不起。

我找到了解决办法为我工作:

@moviesOrders = OrderMovie.where(:user_id => @user.id) 
@movies = Movie.where(id: @moviesOrders.pluck(:movie_id)) 

但有一个更聪明的方式?可能要做到这一点?

+1

您正在编写不必要的代码。 ActiveRecord协会照顾这一点。看到我上面的解决方案 – danielrsmith

+0

不仅可以编写,而且可以对数据库进行不必要的查询。而不是一个单一的查询,你正在做两个。 – Leito

0

因为你已经告诉Rails的是User has_many: movies ...

@user.movies 
相关问题