2011-01-08 136 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