ruby on rails - link_to()问题

Ode*_*rth 2 ruby-on-rails

我建立此链接是为了销毁评论:

    <%= link_to 'Destroy Comment', [comment.post, comment],
    :confirm => 'Are you sure?',  :method => :delete %>
Run Code Online (Sandbox Code Playgroud)

这假设要发送到comments_controller中的destroy动作.

问题是它搜索'show'动作,而不是'destroy'动作:

   Unknown action

   The action 'show' could not be found for CommentsController
Run Code Online (Sandbox Code Playgroud)

你认为你知道为什么会这样吗?

谢谢,

俄德

编辑:问题解决了我用'button_to'

Rob*_*wer 5

Rails 3:

当您使用JQuery时,请确保您拥有正确的rails.js文件(https://github.com/rails/jquery-ujs).使用Prototype时,已安装正确的rails.js文件.另外,请确保在布局头中添加以下内容:

<%= csrf_meta_tag %>
Run Code Online (Sandbox Code Playgroud)

并确保正在加载JS框架和rails.js文件.

<%= javascript_include_tag "jquery", "rails" %>
# or
<%= javascript_include_tag "prototype", "rails" %>
Run Code Online (Sandbox Code Playgroud)

只是旁注 - 您还可以指向Googleapis链接:http://scriptsrc.net/ .

:method => :delete链接中使用时,将创建以下HTML:

<a href="/comments/1" data-method="delete">Click me!</a>
Run Code Online (Sandbox Code Playgroud)

如您所见,正在使用HTML5数据属性.rails.js文件自动将点击事件放在具有这些属性的链接上.当data-method="delete"被设置时,该请求将与HTTP DELETE方法来完成.所以点击它会破坏评论.此外,设置:confirm将创建一个数据确认属性,它可以满足您的期望.

Rails 2:

当你使用Prototype时,这个:method => :delete东西会自动运行.只需确保包含正确的Javascript文件:

<%= javascript_include_tag :defaults %>
Run Code Online (Sandbox Code Playgroud)

使用JQuery时,您应该安装'jrails'插件(https://github.com/aaronchi/jrails).它允许您为JQuery使用相同的Prototype助手.该插件使用旧版本的JQuery,因此请确保更新该版本.

我不确定:method属性是否在Rails 2中使用Prototype或只是常规Javascript.因此,您可能甚至不需要Prototype或JQuery作为Rails 2中的:method属性.

正如我在评论中所说:我从不使用button_to来进行DELETE链接.你可以轻松地使用link_to.据我所知,这是大多数人在创建这种链接时使用的帮手.希望能帮助到你.:)