2016-06-14 2 views
1

다른 모델 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

글을 쓸뿐만 아니라 DB에 불필요한 쿼리를합니다. 단일 쿼리 대신 두 가지 작업을 수행합니다. – Leito

0

이미 User has_many: movies ... 것을 레일 말했다 때문에 :

@user.movies 
2

User 객체가 특정 사용자에 대한 movies의 모든 원하는 @user.movies보다 더 봐 경우에 따라서 order_movies 통해 movies에 대한 관계를 가지고있다.

ActiveRecord 관계 및 다 대 다 관계에 대해 자세히 읽어보십시오. http://guides.rubyonrails.org/association_basics.html

관련 문제