70

Railsヘルパーメソッド、より具体的には、javascriptアセットファイル内のパスヘルパーメソッドを使用する方法はありますか. このファイルfoo.js.coffee.erb

$('#bar').val("<%= create_post_path %>")

エルビスから貰えたら嬉しいです

$('#bar').val("path/to/create")
4

5 に答える 5

77

以下を使用して、任意のヘルパー/モジュール/クラスを 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 } %>

編集: 移動されたスプロケット リポジトリへのリンクを修正しましたが、これが何年も経っても意味があるかどうかはわかりません。

于 2011-11-15T09:04:55.813 に答える
27

これは、初期化子でもトリックを行います。

Sprockets::Context.send :include, MyHelper

開発モードでは、ヘルパーはリクエストごとに再ロードされません。

UrlHelpers を使用したアプローチは、見つける必要があるまで機能しますpost_path(...um...we don't know what post id we'll need at compile time...)。すべての Rails UrlHelpers を JavaScript で再実装する ruby​​ gem があります: https://github.com/railsware/js-routes

于 2012-12-12T14:35:54.143 に答える
19

なぜこれをやりたいのかよくわかりません。

  • 動的な値が含まれているため、javascript ファイルがキャッシュされないようにします。

  • javascript/coffeescript と rails の間の結合が得られます

可能であれば、ビューにターゲット パスを指定して問題を抽象化し、特定のイベントが発生したときに DOM 要素から値を取得することをお勧めします。Rails の「目立たないスクリプト アダプター」のように。例: https://github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173

于 2011-09-18T20:24:01.783 に答える
5

実際、これが役立つかどうかはわかりませんが、使用するために独自のヘルパーを定義する方法がありますrake precompile

新しいイニシャライザを作成し、これを入れます。

module Sprockets
  module Helpers
    module RailsHelper

      def my_helper_method
       ...
      end

    end
  end
end

そして、次のことができます。

<%= my_helper_method %>

あなたの.erb資産に

于 2011-10-08T10:02:48.467 に答える