我该如何将ID传递到收集路线?

时间:2017-04-11 15:53:55

标签: ruby-on-rails ruby windows

我是ruby on rails的新手。当用户点击特定产品的购买按钮时,它将获得产品的ID,然后它将重定向到另一个页面,在那里它将显示产品的所有细节(名称,描述,价格,图像等)..

我创建了一个自定义路由,如下所示:

路线

resources :products do // products is my name of the controller
    collection do
        get :details
    end
  end

查看

<%= button_to 'Add to Cart',details_products_path, class: 'btn btn-primary', method: :get %>

控制器

class ProductsController < ApplicationController
  def index
    @products = Product.all()
  end
  def details
    @product = Product.find(params[:id])
  end

end

注意:我还检查我的佣金路线,它显示的路径

details_products_path   GET /products/details(.:format) products#details

我注意到没有id(像这样/ products / details /:id)

我也试过这个

<%= button_to 'Add to Cart',details_products_path(@products), class: 'btn btn-primary', method: :get %> 

但我得到错误

  

“ProductsController#details中的ActiveRecord :: RecordNotFound”找不到带有'id'的产品=

def details
  @product = Product.find(params[:id])
end

问题:如何将ID传递到位于我的产品控制器的详细信息方法

2 个答案:

答案 0 :(得分:2)

如果您在网址中需要product_id,则需要将其定义为成员路线而不是集合

resources :products do
  member do
    get :details
  end
end

现在你会得到

 GET /products/:id/details(.:format) products#details

有关详细信息adding-more-restful-actions

,请参阅此处

答案 1 :(得分:1)

除非您正在使用:显示其他内容,否则这将是此类网页的正常位置。 ;)