Rails 3 - 如何使用链接传递对象ID

时间:2014-04-18 15:11:23

标签: ruby-on-rails

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"

4 个答案:

答案 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的变量中。