49

Rails 3.1.0.rc4を使用して、javascriptファイル(この場合はevent.js.erb)のルートヘルパーにアクセスしようとしていますが、現時点ではロードされていないようです。マージされた/assets/application.jsファイルをリクエストすると、次のようになります。

throw Error("NameError: undefined local variable or method `events_path' for #<#<Class:0x00000001580010>:0x00000003191510>\n  (in /<...>/app/assets/javascripts/event.js.erb)")

そこにあるルートヘルパーにアクセスする方法はありますか?

4

2 に答える 2

88

更新:これを行うgemがあります:js-routes


問題は、SprocketsがRailsアプリのコンテキスト外でERBを評価しており、期待しているもののほとんどがそこにないことです。

次のように、Sprocketsコンテキストに物事を追加できます。

Rails.application.assets.context_class.class_eval do
  include Rails.application.routes.url_helpers
end

それはすべてうまくいっていますが、IDを必要とするヘルパーを機能させるのは少し難しいです。URIテンプレートと呼ばれる手法を使用します。

var event_path = "<%= CGI.unescape event_path('{event_id}') %>";

/events/{event_id}これは、のようなオブジェクトを使用してURLにレンダリングできるものを返します{ event_id: 1 }。この実装例として、SugarJSのString#assignメソッドを参照してください。私のように自分で転がすこともできます。

于 2011-08-05T05:49:35.027 に答える
1

ファイルを適切なコンテキストにアクセスできるビューに移動してから、JSソースタグからクライアントにプルダウンすることができます。エンジンを作成している場合、MyRailsApp::Application.routes.url_helpersを参照するのは最適ではない可能性があります。

于 2013-03-29T14:36:53.753 に答える