Rails 3 ruby 1.9
我正在尝试将“产品”ID传递到“详细信息”页面并收到错误“无法找到没有ID的产品”
这是我的浏览器地址栏中的链接:
http://localhost:3000/performance_details?product_id=8
我的控制器
class ProductsController < ApplicationController
def performance_details
@title = "Performance Details"
@products = Product.find(params[:id])
end
传递对象ID的视图
<%=link_to 'Details', details_path(product_id: product) %>
接收对象ID的视图
<%@products.each do |product| %>
Do some stuff with products.....%>
<%end%>
路线档案
match 'details' => "products#details"
答案 0 :(得分:3)
您的参数名称为product_id
,而不仅仅是id
。以下是控制器的外观:
class ProductsController < ApplicationController
def performance_details
@title = "Performance Details"
@products = Product.find(params[:product_id])
end
答案 1 :(得分:3)
这可能是你应该怎么做的:
# routes
resources :products do
member do
get :performance_details
end
end
-
# view
# your url will be /products/:id/performance_details
<%=link_to 'Details', performance_details_product_path(product) %>
-
# controller
class ProductsController < ApplicationController
def performance_details
@title = "Performance Details"
@product = Product.find(params[:id])
end
end
答案 2 :(得分:1)
将产品控制器中的@product
行更改为以下内容:
@product = Product.find(params[:product_id])
从下面的评论中,您只能找到一种产品(请注意从复数@products
到单数@product
的更改,因此您不想使用{{1}改变这个:
each
只使用<%@products.each do |product| %>
Do some stuff with products.....%>
<%end%>
而不是@product
执行操作。所以摆脱外部块,只使用product
。我总体推荐Robin's answer中给出的重构。
答案 3 :(得分:-1)
你的参数中没有id
。根据您的网址/performance_details?product_id=8
,您的ID位于名为product_id
的变量中。