Existe-t-il un moyen d'utiliser une méthode d'assistance Rails, plus précisément une méthode d'assistance de chemin dans un fichier d'actif javascript. Ce fichier foo.js.coffee.erb
$('#bar').val("<%= create_post_path %>")
J'adorerais si je pouvais obtenir d'Erubis
$('#bar').val("path/to/create")
Vous pouvez inclure n'importe quel assistant/module/classe dans un modèle erb avec:
<% environment.context_class.instance_eval { include MyHelper } %>
Voir: https://github.com/Rails/sprockets/blob/master/lib/sprockets/environment.rb et https://github.com/Rails/sprockets/blob /master/lib/sprockets/context.rb
Pour utiliser les assistants url, vous devez inclure les assistants de vos applications spécifiques.
Ils sont disponibles sur Rails.application.routes.url_helpers
donc:
<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
EDIT: liens fixes vers le repo des pignons déplacés, mais pas vraiment sûr que cela a encore du sens tant d'années plus tard.
Cela fera également l'affaire dans un initialiseur:
Sprockets::Context.send :include, MyHelper
En mode développement, l'assistant ne sera pas rechargé à chaque demande.
Votre approche avec UrlHelpers fonctionnera jusqu'à ce que vous ayez besoin de trouver post_path(...um...we don't know what post id we'll need at compile time...)
. Il y a un Ruby gem qui réimplémente tous vos Rails UrlHelpers en JavaScript: https://github.com/railsware/js-routes)
Je ne sais pas trop pourquoi vous voulez faire ça.
Vous empêcheriez le fichier javascript d'être mis en cache, car il contient une valeur dynamique
Vous obtiendrez un couplage entre votre javascript/coffeescript et Rails
Si possible, je vous conseillerais de résumer votre problème en fournissant votre chemin cible dans la vue et de récupérer la valeur de l'élément DOM lorsque l'événement spécifique se produit. Tout comme les "adaptateurs de script discrets" pour Rails do. Par exemple: https://github.com/Rails/jquery-ujs/blob/master/src/Rails.js# L157-17
En effet je suis d'accord avec la réponse @eirc (en tenant compte de la documentation Sprockets). Mais j'envisagerais d'inclure des modules d'assistance à Rails au démarrage. Selon
# config/initializers/sprockets.rb
Rails.application.assets.context_class.instance_eval do
include ActionView::Helpers
include Rails.application.routes.url_helpers
include MyModule
end
c'est à cause de: https://github.com/Rails/sprockets-Rails/blob/master/lib/sprockets/railtie.rb#L2
En fait, je ne sais pas si cela aide, mais il existe un moyen de définir vos propres assistants à utiliser pendant rake precompile
Créez un nouvel initialiseur et mettez-le dedans:
module Sprockets
module Helpers
module RailsHelper
def my_helper_method
...
end
end
end
end
Et puis vous pouvez:
<%= my_helper_method %>
dans ton .erb
les atouts