Railsヘルパーメソッド、より具体的には、javascriptアセットファイル内のパスヘルパーメソッドを使用する方法はありますか。このファイルfoo.js.coffee.erb
$('#bar').val("<%= create_post_path %>")
エルビスからもらえたらいいな
$('#bar').val("path/to/create")
以下を使用して、erbテンプレートに任意のヘルパー/モジュール/クラスを含めることができます。
<% environment.context_class.instance_eval { include MyHelper } %>
参照: https://github.com/Rails/sprockets/blob/master/lib/sprockets/environment.rb および https://github.com/Rails/sprockets/blob /master/lib/sprockets/context.rb
URLヘルパーを使用するには、特定のアプリケーションのヘルパーを含める必要があります。
それらはRails.application.routes.url_helpers
そう:
<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
編集:移動したスプロケットリポジトリへのリンクを修正しましたが、これが何年も後に意味をなすかどうかは確かではありません。
これは初期化子でもトリックを行います:
_Sprockets::Context.send :include, MyHelper
_
開発モードでは、ヘルパーはリクエストごとにリロードされません。
UrlHelpersを使用したアプローチは、post_path(...um...we don't know what post id we'll need at compile time...)
を見つけるまで必要です。 JavaScriptですべてのRuby UrlHelpersを再実装するRails gemがあります。 https://github.com/railsware/js-routes
なぜあなたがこれをしたいのか、私にはよくわかりません。
動的な値が含まれているため、javascriptファイルがキャッシュされないようにします
Javascript/coffeescriptとRailsの間のカップリングを取得します
可能であれば、ビューにターゲットパスを指定して問題を抽象化し、特定のイベントが発生したときにDOM要素から値を取得することをお勧めします。 Rails do。の「控えめなスクリプトアダプター」と同じです。例: https://github.com/Rails/jquery-ujs/blob/master/src/Rails.js# L157-17
実際、@ eircの回答に同意します(Sprocketsのドキュメントを考慮に入れる)。しかし、Railsブート時間にヘルパーモジュールを含めることを検討します。
# config/initializers/sprockets.rb
Rails.application.assets.context_class.instance_eval do
include ActionView::Helpers
include Rails.application.routes.url_helpers
include MyModule
end
これは次の理由によります。 https://github.com/Rails/sprockets-Rails/blob/master/lib/sprockets/railtie.rb#L2
実際、これが役立つかどうかはわかりませんが、rake precompile
中に使用する独自のヘルパーを定義する方法があります
新しい初期化子を作成して、これを入れます:
module Sprockets
module Helpers
module RailsHelper
def my_helper_method
...
end
end
end
end
そして、次のことができます。
<%= my_helper_method %>
.erb
アセット内