嵌套在Rails4中的Devise下

时间:2014-11-07 18:09:07

标签: ruby-on-rails ruby devise

我对Controller Show产品有疑问。任何人都可以帮助我吗?

  

没有路由匹配{:action=>"show", :controller=>"products", :id=>nil, :vendor_id=>"3"}缺少必需的密钥:[:id]

   <td>
     <%= link_to 'Show', vendor_product_path(current_vendor, @product) %><br>
     <%= link_to 'Edit', edit_product_path(product) %><br>
     <%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %>
   </td>

我的产品控制器

  def show
    @product = Product.find(params[:vendor_id])
  end

2 个答案:

答案 0 :(得分:1)

如果您正在尝试查找特定供应商的所有产品,则类似于:

def show
  @vendor_products = Vendor.find(params[:vendor_id]).products
end

如果您只是想通过ID找到单个产品:

def show
  # Since :id is currently nil in params, this will not work
  @product = Product.find(params[:id])
end

答案 1 :(得分:0)

在视图中,您从哪里获得@product?似乎@product尚未保存到数据库中,因此它在视图中为零(在<%= link_to 'Show', vendor_product_path(current_vendor, @product) %>行中。您显示了哪个视图文件,以及相应的控制器操作是什么?

在该控制器操作中,请务必添加一行以保存产品@product.save

如果@product有效,请尝试明确传入字段:

<%= link_to 'Show', vendor_product_path(:vendor_id => current_vendor.id, :id => @product) %>