ruby-on-rails – 添加一个简单的链接来设置Rails中的布尔字段 – 似乎没有任何事情发生

我正在尝试添加一个链接到Rails视图,以便在单击时将布尔字段设置为true.在控制器(present_controller.rb)中,我有以下代码

def taken_toggle
  @matching = Present.find(params[:id])
  @matching.taken = true
  @matching.save
end

在相关视图中,我有以下代码

<%= link_to "I want to buy this present",:url => {:action => "taken_toggle",:id => @present.id} %>

但是,当我点击按钮时没有任何反应.如果我返回主列表,则布尔字段尚未更新.在日志中我得到以下内容

Started GET "/presents/2/edit?url[action]=taken_toggle&url[id]=2" for 152.78.101.154 at Sun Jan 30 04:56:34 -0800 2011
  Processing by PresentsController#edit as HTML
  Parameters: {"url"=>{"action"=>"taken_toggle","id"=>"2"},"id"=>"2"}
Rendered presents/_form.html.erb (6.0ms)
Rendered presents/edit.html.erb within layouts/application (10.0ms)
Completed 200 OK in 13ms (Views: 10.7ms | ActiveRecord: 0.9ms)

我敢肯定我错过了一些非常简单的事 – 有谁知道它是什么?

更新:我添加了路线和rake路线现在给出以下行(在所有正常路线中):

taken_toggle_present PUT    /presents/:id/taken_toggle(.:format) {:controller=>"presents",:action=>"taken_toggle"}

我应该更改链接以使其工作?目前链接仍然是:

<%= link_to "I want to buy this present",:id => @present.id} %>

但这对我来说似乎是正确的,因为它会采取正确的行动,并传递身份证.有任何想法吗?

更新:
我已经尝试了最新的答案,但是它们都会导致以下日志错误

Started GET "/presents/2/taken_toggle" for 86.150.141.2 at Fri Feb 04 01:37:23 -0800 2011

ActionController::RoutingError (No route matches "/presents/2/taken_toggle"):

考虑到上面的rake路线的输出,这看起来有点奇怪.有任何想法吗?

解决方法

link_to不接受:url选项,因此它将您的:url哈希中的所有内容转换为GET参数:您可以在日志中的请求路径中看到它们:

GET "/presents/2/edit?url[action]=taken_toggle&url[id]=2"

你应该只能取出:url => {}部分使链接工作:

link_to "I want to buy this present",:action => "taken_toggle",:id => @present.id

但是,通常,指定到restful操作的链接的首选方法是使用path helper

link_to "I want to buy this present",taken_toggle_present_path(@present)

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...