How to include ActionView helpers in the assets pi

2019-01-14 13:27发布

问题:

How to include Rails view helpers to be accesible by assets pipeline execution context?

An example use case would be to generate the markup for a form, using form_tag helper method, and make it available to a Javascript template (like handlebars, jst, etc.).

I use handlebar_assets gem, but this should apply to any erb or haml template too.

回答1:

Create a inititializer and include the helpers in the context of the assets like this:

Rails.application.assets.context_class.class_eval do
  include ActionView::Helpers
  include MyAppHelper
  include Rails.application.routes.url_helpers
end

Taken from this sprockets issue



回答2:

The above answer is now out of date. As of sprockets-rails 3, the appropriate interface is a configure block, like so:

Rails.application.config.assets.configure do |env|
  env.context_class.class_eval do
    # include SomeHelper
  end
end

This configure block should still be placed in an initializer.

reference: https://github.com/rails/sprockets-rails/issues/307#issuecomment-170707886