Railsは初めてで、link_toメソッドについて疑問がありました。2番目の引数は、URLヘルパーメソッドを使用して生成できるリンクのURLである必要があります。ただし、ヘルパーメソッドの引数として:idを渡す必要がある場合があります。これは、オブジェクト(属性の1つとして:idを持つ)を渡すことで実行できます。
あるケースでは、オブジェクトをメソッドに渡しませんでした(ビューの1つで)。ただし、URLは正しい:idを取得できました(おそらく以前に定義されたインスタンス変数を使用)。
オブジェクトを渡さなかったときに、Railsはどのようにして:idの値を選択しましたか?
どうもありがとう!
編集
関連するコードは次のとおりです。
link_to 'Find Movies With Same Director', same_dir_path
ここでは、URLの「ショー」ページを表示してい/movies/1
ます。はsame_dir_path
URLのヘルパーメソッドです。/movies/same_dir/:id
ここ:id
で、は渡されたオブジェクトのヘルパーメソッドでありmovie#same_dir
、はcontroller#action
です。ヘルパーメソッドにオブジェクトを渡さなかったことに注意してくださいlink_to
。それでも、:id
前のURL(この場合は「1」)からオブジェクトを取得します。URLは前のURLとは相対的ではありません(パスが異なります)。
これはコントローラーメソッド(same_dir)です。
def same_dir
@movies = Movie.find(params[:id])
if (@movies.director.nil? || @movies.director == '')
flash.keep
redirect_to movies_path
flash[:warning]="'#{@movies.title}' has no director info"
return
end
@otherMovies = Movie.find_all_by_director(@movies.director)
end
これはroutes.rbコードです:
match 'movies/same_dir/:id'=> 'movies#same_dir', :as => :same_dir
resources :movies