我对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
答案 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) %>