2011-01-08 127 views
2

我为了制作这个环节摧毁评论:Ruby on Rails的 - 的link_to()的问题

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

这个假设发送给在comments_controller的破坏行动。

的问题是,它会寻找“秀”的动作,取而代之的是“摧毁”行动:

Unknown action 

    The action 'show' could not be found for CommentsController 

你认为你知道它为什么不呢?

感谢,

俄德

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

+0

Dupe:http://stackoverflow.com/questions/4606860/rails-3-link-to-to-destroy-not-working/4607179#4607179 – 2011-01-08 14:40:53

+0

谢谢你!它的工作:) – 2011-01-08 14:46:42

回答

5

的Rails 3:

当您使用JQuery,请确保您有正确的轨道上。 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方法完成。因此点击它会破坏评论。此外,设置:确认将创建一个数据确认属性,它符合您的预期。

梁2:

当您使用原型,该:method => :delete东西会自动工作。只要确保你有正确的JavaScript文件:

<%= javascript_include_tag :defaults %> 

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

我不确定如果:方法属性在Rails 2中使用Prototype或者只是使用普通的Javascript。因此,您甚至可能不需要Prototype或JQuery作为Rails 2中的:method属性。

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

0

我刚刚在我自己的应用程序(导轨3)解决了这个问题。我遵循了rails 3的步骤,并且最重要的问题是在我的public/javascripts文件夹中安装了正确的rails.js文件。它没有工作,直到我已经安装rails.js

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

0

我刚刚遇到了与Rails 3相同的问题。我正在使用更新的rails.js文件的jQuery。对我来说固定的东西是简单的 - 使用:method =>:delete,not:method =>:destroy。

=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" 

就像一个魅力:)

0

确保你在你的application.js文件中引用//= require jquery//= require jquery_ujs(按顺序),在\app\assets\javascripts