REST销毁链接生成问题

时间:2010-04-02 15:37:44

标签: ruby-on-rails

我正在使用rails beta 3,我有一个名为index.html.erb的erb页面供讨论控制器使用。在该页面中,我有如下链接:

<%= link_to 'Delete', {:action=>'destroy', :id=>@discussion}, :confirm=>"Are you sure", :method=>'post' %>

应该生成删除讨论的链接,但生成的html是

<a href="/discussions/1" data-confirm="Are you sure" data-method="post" rel="nofollow">Delete</a>

始终路由到show动作。我认为href应该是/ discussion / destroy / 1。但由于某种原因,它不是。

有什么想法吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

这是正确的href,但方法应为:delete。您还需要确保使用新的不引人注目的javascript方式在rails 3中正确设置。您可能需要添加csrf_meta_tag帮助程序,如此链接中所述:

http://blog.loopedstrange.com/modest-rubyist-archive/rails-3-ujs-and-csrf-meta-tags

答案 1 :(得分:0)

查看routing guide时,删除链接应该在示例中的表单中。除了该方法应该是DELETE而不是POST。但这可能是一个兼容的问题/解决方案,因为与GET和POST相比,支持DELETE方法的“更少”。

使用链接上的GET方法激活 show 操作,这显然不是查看链接的情况。

所以你确定你的路线设置正确吗?类似的东西:

map.resources :discussions

修改: 我刚刚看到您的link_to代码中包含错误,:method应设置为:delete

<%= link_to 'Delete', {:action=>'destroy', :id=>@discussion}, :confirm=>"Are you sure", :method=>:delete %>

此外,您可以使用类似discussion_path(@discussion_item)的内容来生成路径(URL)。这比手动创建路径更清楚。为此,您需要上面的路径设置和包含当前(显示)页面信息的@discussion_item变量。

所以你的link_to行变成这样:

<%= link_to 'Delete', discussion_path(@discussion_item), :confirm=>"Are you sure", :method=>:delete %>

答案 2 :(得分:0)

您可能正在使用rails 3.1

尝试替换

<%= javascript_include_tag :defaults %>

<%= javascript_include_tag "application" %>