微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐