2016-06-14 11 views
1

belongs_toのすべてのアイテムを見つけます.rbRailsは、私は、次の3つのモデルを持っている別のモデル

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つの行でこれを行うには?

+1

不要なコードを書いています。 ActiveRecordアソシエーションがこれを処理します。上記の私の解決策を見てください。 – danielrsmith

+0

書き込みだけでなく、DBに対して不要なクエリを実行します。 1つのクエリではなく、2つのクエリを実行しています。 – Leito

0

すでにUser has_many: movies ...ことのRailsを告げたので:

@user.movies 
2

Userオブジェクトを使用すると、特定のユーザーのためのmoviesの全てが欲しい@user.moviesよりもう探す必要はありません場合は、そのためorder_moviesているmoviesのための関係を持っています。

ActiveRecordリレーションシップと多対多リレーションシップについて詳しくは、こちらをご覧ください。 http://guides.rubyonrails.org/association_basics.html

関連する問題