1

私の現在のコードは次のようになります。

 <%= 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が見つかりませんでした。これは、デフォルトを削除することを示唆しています。取り出して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)

私が試したもう1つのことは、デフォルトの行を削除することです。これは、プレレール3.1であり、javascript_include_tag内の唯一のものとして「アプリケーション」を使用していますが、まだこの問題があります。

4

3 に答える 3

2

もっともらしい説明は、サーバーに非GETアクションが発生したときにRailsフォームが期待するCRSFトークンに関係しています。Railsでフォームを作成すると、セキュリティのためにサーバーに渡されるトークンがあります。これは、form_forandform_tagヘルパーを使用すると自動的に組み込まれます(フォームはPOSTSなどを使用します)。

のためprotect_from_forgeryapplication_controllerrailsではフォームの外部からPOST / DELETE / PUTを実行できません。そのため、link_toは機能しません。これは単なるリンクであり、POSTを実行しようとします。しかし、この行にコメントすると、リンクは問題なく機能します。

詳細はこちら: http: //guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf

于 2012-09-28T12:52:17.350 に答える
2

Link_to を Button_to に変更すると修正されました。

なんで?

于 2012-09-28T12:47:13.810 に答える
1

削除リンクは単なるリンクであり、js マジックはそれをフォームに変換してから投稿します。そのため、フォームは機能し、リンクは機能しませんでした。リンクのままである必要があります。

削除リンクが機能しなかった理由については、js ファイルが見つからない (したがって 404)、または js インクルードを正しく取得した場合に js にエラーがある場合、リンクはヘルパーによって変換されます。ブラウザーで js コンソールを確認し、エラーを探します。

あなたのリンクは get リクエストを送信しているため、組み込みの Rails js がリンクの変換に失敗していることは明らかです。

于 2012-09-28T12:56:16.263 に答える