2011-11-15 31 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

相关问题