2011-11-15 50 views
0

我有一個模型,產品,並在該模型的顯示視圖,我想有一個選擇框,用戶可以查看不同的產品。因此,如果用戶在查看「產品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' %> 

但是,這是行不通的。我可以選擇不同的產品,然後點擊開始,但它只是用於同一個產品,而不是我在盒子中選擇的產品。

我在這裏做錯了什麼?

基本上,我嘗試使用,而不是像這樣一個選擇框:

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

這就是我對我的表演動作控制器:

@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 [:product_id]是否被你的表單傳遞,如果它然後使用,而不是params [:id]基本上:

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

如果可以的話將您的代碼發佈到ShowController的ProductsController上,它會更清晰地說明問題。

您想用於「顯示」正確產品的id由params [:product_id]傳遞。所以你應該在你的產品控制器中使用它,

+0

我沒有在表演動作的任何代碼,它只是直接傳送到視圖去.... – croceldon

+0

你的表演動作至少應該具備以下條件: ' 高清顯示 @product =產品.find(params [:id]) end ' 除非您使用自動爲您定義@product的gem – Whereisccguys

+0

我的不好 - 忘記了之前使用的過濾器。它現在添加到我的原始帖子中。 – croceldon

相關問題