我正在尝试添加一个链接到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 举报,一经查实,本站将立刻删除。