Using a Rails helper method within a javascript asset
Solution 1:
You can include any helper/module/class in an erb template with:
<% environment.context_class.instance_eval { include MyHelper } %>
See: https://github.com/rails/sprockets/blob/master/lib/sprockets/environment.rb and https://github.com/rails/sprockets/blob/master/lib/sprockets/context.rb
To use the url helpers you have to include your specific applications' helpers.
They are available at Rails.application.routes.url_helpers
so:
<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
EDIT: Fixed links to moved sprockets repo but not really sure this still makes sense so many years later.
Solution 2:
This will also do the trick in an initializer:
Sprockets::Context.send :include, MyHelper
In development mode the helper will not be reloaded on every request.
Your approach with UrlHelpers will work until you need to find post_path(...um...we don't know what post id we'll need at compile time...)
. There is a ruby gem which reimplements all of your Rails UrlHelpers in JavaScript: https://github.com/railsware/js-routes
Solution 3:
I'm not quite sure, why you want to do this.
You would prevent the javascript file from being cached, as it contains a dynamic value
You would get a coupling between your javascript/coffeescript and rails
If possible I would advice you to abstract your problem away by providing your target path in the view and retrieve the value from the DOM-Element when the specific event occurs. Just like 'Unobtrusive Scripting Adapters' for Rails do. E.g.: https://github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173