2012-09-26 43 views
1

我當前的代碼如下所示:刪除方法未在Rails的工作

<%= javascript_include_tag "hchq.js", "bootstrap-image-gallery.js", "bootstrap-image-gallery.min.js", "load-image.min.js", "media.js", "jquery", "bootstrap.js", "jquery.dataTables.js", "DT_bootstrap.js" %> 
    <%= javascript_include_tag :defaults %> 

不過,我不斷收到:

ActionController::RoutingError (No route matches [GET] "/assets/defaults.js"): 
    actionpack (3.2.8) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' 
    railties (3.2.8) lib/rails/rack/logger.rb:26:in `call_app' 
    railties (3.2.8) lib/rails/rack/logger.rb:16:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/request_id.rb:22:in `call' 
    rack (1.4.1) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.4.1) lib/rack/runtime.rb:17:in `call' 
    activesupport (3.2.8) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
    rack (1.4.1) lib/rack/lock.rb:15:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/static.rb:62:in `call' 
    railties (3.2.8) lib/rails/engine.rb:479:in `call' 
    railties (3.2.8) lib/rails/application.rb:223:in `call' 
    rack (1.4.1) lib/rack/content_length.rb:14:in `call' 
    railties (3.2.8) lib/rails/rack/log_tailer.rb:17:in `call' 
    rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service' 
    /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' 
    /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' 
    /usr/local/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' 

挖掘到問題多,我發現:Rails 3.1rc4 defaults.js not found,暗示我採取默認線路。我把它拿出來,404消失了,但隨着它的進出,我無法發出刪除請求。它只是引導我進入展示頁面。

關於正在發生的事情以及如何解決這個問題的任何想法,所以我沒有得到404並可以發出刪除請求?

更新:

下面是實際的刪除鏈接:<%= link_to 'Delete', client_path(client), method: "delete", class: "label label-important" %>產生下面的HTML:<a href="/clients/2" class="label label-important" data-method="delete" rel="nofollow">Delete</a>這似乎我的權利。

,這裏是從日誌行:

Started GET "/clients/2" for 127.0.0.1 at 2012-09-27 16:50:23 -0500 
Processing by ClientsController#show as HTML 
    Parameters: {"id"=>"2"} 
    Client Load (0.3ms) SELECT "clients".* FROM "clients" WHERE "clients"."id" = ? LIMIT 1 [["id", "2"]] 
    Rendered clients/show.html.erb within layouts/application (1.2ms) 
Completed 200 OK in 47ms (Views: 45.4ms | ActiveRecord: 0.3ms) 


Started GET "/assets/defaults.js" for 127.0.0.1 at 2012-09-27 16:50:23 -0500 
Served asset /defaults.js - 404 Not Found (4ms) 

另一件事我想是擺脫違約線,因爲這是前軌3.1,並使用「應用」爲裏面的唯一的事情javascript_include_tag和我仍然有這個問題。

+0

如果將'<%= javascript_include_tag:defaults%>'移動到另一個'javascript_include_tag'之上,會發生什麼? – ScottJShea

+0

@ScottJShea這沒有什麼區別。 –

+0

嘗試使用符號而不是字符串。 – MurifoX

回答

2

唯一合理的解釋是當CRSF令牌Rails表單期望有一個非GET操作來到服務器時。當您在rails中構建表單時,出於安全目的而將一個令牌傳遞給服務器。當您使用form_forform_tag助手(表單使用POSTS和東西)時,它會自動內置。

因爲在你application_controllerprotect_from_forgery的,軌道不讓你做POST/DELETE從形式外/ PUT,這就是爲什麼link_to不起作用,它只是一個鏈接,試圖做一個POST。但是,如果你評論這條線,鏈接將工作得很好。

此處瞭解詳情:http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf

2

將Link_to改爲Button_to修復它。

爲什麼?

+1

我相信'button_to'包裝表單內的鏈接。我現在會發布最詳細的答案。 – MurifoX

1

你的刪除鏈接只是一個鏈接,JS魔法將其轉換爲表格,然後將其發佈。這就是表單工作的原因,而鏈接沒有 - 它必須保持鏈接。

至於爲什麼刪除鏈接不起作用,你錯過了js文件(因此是404),或者在js中出現錯誤,如果你得到js include right,鏈接將由helper轉換。在瀏覽器中檢查您的js控制檯並查找錯誤。

您的鏈接正在向您發送獲取請求,所以顯然內置的rails js無法轉換鏈接。