我有一个型号,产品,在这个型号的展示视图中,我希望有一个选择框,供用户能够查看不同的产品。因此,如果用户正在查看“产品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 %>
这是我在控制器中显示动作的内容:
@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 :(得分:0)
如果您可以在ProductsController for Show上发布您的代码,那么可以更明确地说明这一点。
您要用于“显示”正确产品的ID由params [:product_id]传递。所以你应该在ProductsController中使用它
答案 1 :(得分:0)
一个简单的方法是检查你的表单是否传递了params [:product_id],如果它然后基本上使用而不是params [:id]:
if params[:product_id]
@product = Product.find(params[:product_id])
else
@product = Product.find(params[:id])
end