How to include ActionView helpers in the assets pipeline?
Asked Answered
O

2

12

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.

Ozellaozen answered 11/1, 2013 at 18:19 Comment(0)
O
29

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

Ozellaozen answered 11/1, 2013 at 18:19 Comment(4)
This also worked for me when I wanted to render a custom ERB to string with template = ERB.new(html) template.result(binding). Without this I wasn't able to use concat and other simple helpers.Birdwell
@brutuscat, can you clarify where you would put this code? ThanksLanielanier
@Lanielanier no problem: "Create a inititializer", see more here guides.rubyonrails.org/configuring.html#using-initializer-filesOzellaozen
reference: github.com/rails/sprockets-rails/issues/…Firebrick
F
15

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

Firebrick answered 11/1, 2016 at 23:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.