Rails link_to_remote降级和url_for

时间:2009-03-26 20:36:05

标签: ruby-on-rails ajax url-routing

我正在尝试使用AJAX创建一个在数据库中销毁和输入的链接,但我也希望它在没有启用JavaScript的情况下运行

但是以下代码

<%=link_to_remote "Delete", :update => "section_phone", :url => {:controller => "phone_numbers", :action => "destroy", :id => phone_number_display.id }, :href => url_for(:controller => "phone_numbers", :action => "destroy", :id => phone_number_display.id)%>

产生输出

 <a href="#" onclick="new Ajax.Updater('section_phone', '/phone_numbers/destroy/1', {asynchronous:true, evalScripts:true, parameters:'authenticity_token=' + encodeURIComponent('b64efb643e49e9af5e2e195a90fd5a8b6b99ece2')}); return false;">Delete</a>

由于某种原因,url_for无法正常工作且href标记设置为#。 我不知道为什么这不起作用,因为我没有收到日志中任何错误的通知

有谁知道为什么会这样?

谢谢

2 个答案:

答案 0 :(得分:2)

你错过了选项{}哈希的花括号,其中:update和:url属于,将它们与href所属的html_options {}哈希分开:

试试这个:

<%=link_to_remote "Delete", {:update => "section_phone", :url => {:controller => "phone_numbers", :action => "destroy", :id => phone_number_display.id }}, :href => url_for(:controller => "phone_numbers", :action => "destroy", :id => phone_number_display.id)%>

这将获得显示为链接的href属性的URL,但是对您的destroy操作的GET请求不应该删除它。你需要其他东西(比如vrish88建议的那样),这样你就可以向destroy动作发出一个GET请求来获取一个表单,然后POST这个表单来实际删除你的电话号码。

答案 1 :(得分:1)

我相信您正在寻找类似的内容:RailsCasts - Destroy Without JavaScript