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)")
そこにあるルートヘルパーにアクセスする方法はありますか?
更新:これを行う宝石があります: js-routes
問題は、SprocketsがRailsアプリのコンテキスト外でERBを評価しており、期待しているもののほとんどがそこにないことです。
Sprocketsコンテキストに次のように追加できます。
Rails.application.assets.context_class.class_eval do
include Rails.application.routes.url_helpers
end
これで十分ですが、IDを必要とするヘルパーを取得するのは少し難しいです。 RIテンプレート と呼ばれる手法を使用します。
var event_path = "<%= CGI.unescape event_path('{event_id}') %>";
これは、/events/{event_id}
のようなオブジェクトを使用してURLにレンダリングできる{ event_id: 1 }
を返します。これの実装例として、SugarJSの String#assign メソッドを参照してください。 自分でロール もできます。
適切なコンテキストにアクセスできるビューにファイルを移動し、JSソースタグからクライアントにプルダウンできます。エンジンを作成している場合、MyRailsApp :: Application.routes.url_helpersを参照することは最適ではない場合があります。