web-dev-qa-db-ja.com

アセットパイプラインのルートヘルパー

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)")

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

49
tbuehlmann

更新:これを行う宝石があります: 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 メソッドを参照してください。 自分でロール もできます。

88
Adam Lassek

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

1
Peter Hawkins