1

我从这样的视图中调用控制器操作:

<%= link_to "cancel offer", offermethod_offer_path, 
    class: "btn btn-medium btn-danger pull-right"  %>

控制器操作删除记录(报价)。我使用页面中的 params[:id] 标记来识别控制器中的记录,如下所示:

class OffersController < ApplicationController
   def offermethod
      Offer.find(params[:id]).destroy
   end
.
end

但是,我想向 offermethod 传递一个附加参数。我可以从报价视图传递一个实例变量吗,所以代码看起来像

<%= link_to "cancel offer", offermethod_offer_path(@variable.id), 
    class: "btn btn-medium btn-danger pull-right"  %>

并在控制器中

   def offermethod(variable)
      Offer.find(variable).destroy
   end

我试图这样做,但我无法传递变量/id 参数。得到类似“找不到带有 nil id 的报价”的错误。

你能帮我用正确的方法将变量传递给这样的控制器吗?非常感谢!

4

1 回答 1

0

是的你可以。但是,您需要命名变量,因为 GET 参数是键/值对。

<%= link_to "cancel offer", offermethod_offer_path(name: @variable.id), #...

一种更简洁的方法是将成员路由添加到您的集合中,例如

resources :offers do 
  delete :offermethod, on: :member
end

这样,您可以使用简单的Offer.find params[:id],就像@sircapsalot 可能想说的那样。

编辑:我不知道,但我觉得你应该阅读 rails 指南,尤其是关于 REST 和 HTTP 动词的部分。如果你删除/销毁一个资源,你应该使用DELETE类型 http 请求,正如我在上面描述的路由。但是,您还需要将所需的方法传递给您的表单或链接。对于链接,这将是link_to 'name', path_to_object_delete_method(object), method: :delete. 同样的事情也适用于表格。

于 2013-06-10T13:00:05.987 回答