Rails找到所有项目belongs_to另一个模型

时间:2016-06-14 19:59:52

标签: ruby-on-rails ruby ruby-on-rails-4

我有以下三种模式:

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

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

谢谢。

3 个答案:

答案 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))

但是有更聪明的方法吗?可能在一行中做到这一点?