ruby on rails - link_to()问题

时间:2011-01-08 14:35:48

标签: ruby-on-rails

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

    <%= link_to 'Destroy Comment', [comment.post, comment],
    :confirm => 'Are you sure?',  :method => :delete %>

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

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

   Unknown action

   The action 'show' could not be found for CommentsController

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

谢谢,

乌迪德

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

5 个答案:

答案 0 :(得分:5)

Rails 3:

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

<%= csrf_meta_tag %>

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

<%= javascript_include_tag "jquery", "rails" %>
# or
<%= javascript_include_tag "prototype", "rails" %>

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

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

<a href="/comments/1" data-method="delete">Click me!</a>

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

Rails 2:

使用Prototype时,:method => :delete会自动生效。只需确保包含正确的Javascript文件:

<%= javascript_include_tag :defaults %>

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

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

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

答案 1 :(得分:1)

  

错误:ActionController :: RoutingError(没有路由匹配[GET]“/javascripts/jquery.js”)

解决方案,下载:http://code.jquery.com/jquery-1.6.3.js

  

错误:AbstractController :: ActionNotFound(无法为CommentsController找到操作'show')

解决方案,下载:https://github.com/rails/jquery-ujs/raw/master/src/rails.js

在rails 3.1.0中将上面的js文件保存到app / public / javascripts / 重命名或删除现有的js文件。

答案 2 :(得分:0)

我刚刚在自己的应用程序(rails 3)中解决了这个问题。我按照rails 3的步骤操作,最重要的问题是在我的rails.js文件夹中安装了正确的public/javascripts文件。在我安装rails.js后,它才能正常工作。

我选择的是这个: https://raw.github.com/rails/jquery-ujs/master/src/rails.js

答案 3 :(得分:0)

我刚刚遇到了与Rails 3相同的问题。我正在使用jQuery和更新的rails.js文件。为我修复它的原因很简单 - 使用:method =&gt; :删除,不是:method =&gt; :破坏

=link_to( 'delete account', user_admin_path(current_user.id), :confirm => "Deleting your account is irreversible!! Are you sure you wish to continue?", :method => :delete )

在标题中我有:

= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js", "jquery.colorbox-min", "jquery.validate.min", "rails"

像魅力一样工作:)

答案 4 :(得分:0)

请务必在//= require jquery的application.js文件中引用//= require jquery_ujs\app\assets\javascripts(按此顺序)。