2016-11-13 16 views
0

すべてのムービーを選択したディレクターで表示します。ルートとコントローラは正常に動作します。ただし、表示されているフィルタリングされたムービーはすべて同じです。たとえば、私は2つの映画が同じ監督を持っている4つの映画があります。私が望むのは、ビューページにこれらの2つの異なるタプルを表示することですが、示されている2つのタプルは同じです。railsは共通の属性を持つタプルを返します

def find_movies_by_same_director 
    @movie = Movie.find(params[:id]) 
    @director = @movie.director 
    if (not @director.nil?) and (not @director.empty?) 
    #@movies = Movie.find_all_by_director(@director) if (not @director.nil?) and (not @director.empty?); 
    @movies = Movie.find_by_sql("SELECT * FROM movies i WHERE i.director == '#{@director}'") 
    render :director 
    else 
    flash[:notice] = "'#{@movie.title}' has no director information" 
    redirect_to root_path 
    end 
end  

私は、方法、find_by_sqlとfind_by_allの両方を試してみてくださいタプルを見つけるために、彼らの両方が同じ結果を得る:これは、コントローラのコードです。 これは、ビューのコードです:

%tbody 
- @movies.each do |movie| 
    %tr 
    %th= @movie.title 
    %th= @movie.rating 
    %th= @movie.release_date 

私はレールに新たなんだ、ので、任意のコメントや提案が理解されるであろう。

+1

が、6行目で検索を実行するより標準的なRailsの道は 'だろう@movies = Movie.where(監督:@director) '。あなたのビューで '@ director'を使う必要はないので、' director = @ movie.director'と '@movies = Movie.where(director:director)'を実行してください。 – moveson

+0

それは動作します!ご返信ありがとうございました。 – kchen

+0

それを聞いてうれしい。あなたは瞬間があるときに答えを受け入れてください。 – moveson

答えて

1

ビューコードでは、コントローラ変数の2行目の元の検索結果を返すインスタンス変数@movieを使用しています。 @moviesを繰り返しながら各ムービーを見るには、ブロック内で宣言しているローカル変数を使用する必要があります。

混乱する場合は、ブロック変数の名前を完全に変更することがあります。これは結果を変えるものではありませんが、読みやすくすることができます。

%tbody 
- @movies.each do |matched_movie| 
    %tr 
    %th= matched_movie.title 
    %th= matched_movie.rating 
    %th= matched_movie.release_date 

EDITは:(それは私がこの回答に私のコメントを追加することが示唆された。)

これは、あなたの質問には無関係ですが、6行目で検索を実行するより標準的なRailsの方法は@movies = Movie.where(director: @director)になり。いっそのこと、あなたが行うことができ、あなたのビューで@directorを使用する必要はありませんので、:あなたの質問に関係のない、また

director = @movie.director 
@movies = Movie.where(director: director) 
+0

私はあなたも答えにあなたのコメントを含めるべきだと思います、コメントは良いアドバイスをしています。 –

関連する問題