2011-11-15 13 views
0

私はモデルのProductを持っています。このモデルの表示ビューでは、ユーザーが別のProductを表示できるようにする選択ボックスが必要です。したがって、ユーザーが「製品1」ページを見る場合、選択ボックスから「製品2」を選択してその製品を見ることができます。モデルのインスタンスを切り替えるフォームを作成するにはどうすればよいですか?

は、ここで私は、この選択ボックスを作成するために使用しているコードです:

<%= form_tag({:controller => "products", :action => "show"}, :method => :get) do %> 
<%= select_tag :product_id, options_from_collection_for_select(Product.all, :id, :title) %> 
<%= submit_tag 'Go' %> 

しかし、これは動作しません。別の製品を選択して[Go]をクリックすることもできますが、ボックスで選択したものではなく、同じ製品に移動します。

私はここで間違っていますか?

基本的に、私が代わりにこのような何かの選択ボックスを使用しようとしている:

<% Product.all.each do |p| %> 
    <%= link_to p.title, p %> 
<% end %> 

は、ここで私は、コントローラの私のshowアクションのために持っているものだ:

@product = Product.find(params[:id]) 
    rescue ActiveRecord::RecordNotFound 
    flash[:alert] = 'The product you were looking for could not be found' 
    redirect_to products_path 

答えて

0

params [:id]の代わりにそれを使用する場合は、params [:product_id]がフォームによって渡されたかどうかを確認するのが簡単な方法です。

if params[:product_id] 
    @product = Product.find(params[:product_id]) 
else 
    @product = Product.find(params[:id]) 
end 
0

あなたが可能であればショーのProductsControllerにコードを投稿すると、もっと明確になるでしょう。

正しい製品を「表示」するために使用したいIDは、params [:product_id]によって渡されます。だからあなたのProductsControllerでそれを使用している必要があります

+0

私はshowアクションで任意のコードを持っていない、それはちょうどあなたのshowアクションには、少なくとも以下を持っている必要があり – croceldon

+0

....ストレートビューに通過します: ' DEF @product =製品を表示.find(params [:id]) end あなたのために@productを自動的に定義する宝石を使用しない限り – Whereisccguys

+0

私の悪い - 私は使用しているフィルタの前に忘れてしまった。それは今私の元の投稿に追加されました。 – croceldon

関連する問題