Gibt es eine Möglichkeit, eine Rails-Hilfsmethode zu verwenden, insbesondere eine Pfadhilfemethode in einer Javascript-Asset-Datei? Diese Dateifoo.js.coffee.erb
$('#bar').val("<%= create_post_path %>")
Ich würde es lieben, wenn ich von Erubis bekommen könnte
$('#bar').val("path/to/create")
Antworten:
Sie können jeden Helfer / jedes Modul / jede Klasse in eine erb-Vorlage aufnehmen mit:
<% environment.context_class.instance_eval { include MyHelper } %>
Siehe: https://github.com/rails/sprockets/blob/master/lib/sprockets/environment.rb und https://github.com/rails/sprockets/blob/master/lib/sprockets/context.rb
Um die URL-Helfer verwenden zu können, müssen Sie die Helfer Ihrer spezifischen Anwendungen einschließen.
Sie sind erhältlich bei
Rails.application.routes.url_helpers
:<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
BEARBEITEN: Links zu Repo mit bewegten Kettenrädern behoben, aber nicht wirklich sicher, ob dies noch so viele Jahre später Sinn macht.
quelle
Rails.application.routes.url_helpers
:<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
Dies wird auch den Trick in einem Initialisierer tun:
Sprockets::Context.send :include, MyHelper
Im Entwicklungsmodus wird der Helfer nicht bei jeder Anforderung neu geladen.
Ihr Ansatz mit UrlHelpers funktioniert so lange, bis Sie ihn finden müssen
post_path(...um...we don't know what post id we'll need at compile time...)
. Es gibt ein Rubinjuwel, das alle Ihre Rails UrlHelper in JavaScript neu implementiert: https://github.com/railsware/js-routesquelle
Ich bin mir nicht ganz sicher, warum du das machen willst.
Sie würden verhindern, dass die Javascript-Datei zwischengespeichert wird, da sie einen dynamischen Wert enthält
Sie würden eine Kopplung zwischen Ihrem Javascript / Coffeescript und den Schienen erhalten
Wenn möglich, würde ich Ihnen raten, Ihr Problem zu abstrahieren, indem Sie Ihren Zielpfad in der Ansicht angeben und den Wert aus dem DOM-Element abrufen, wenn das bestimmte Ereignis eintritt. Genau wie bei "Unauffälligen Skriptadaptern" für Rails. Beispiel: https://github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173
quelle
asset_path
In der Tat stimme ich der Antwort von @eirc zu (unter Berücksichtigung der Dokumentation von Sprockets). Aber ich würde in Betracht ziehen, Hilfsmodule beim Booten des Rails einzuschließen. Wie per
# config/initializers/sprockets.rb Rails.application.assets.context_class.instance_eval do include ActionView::Helpers include Rails.application.routes.url_helpers include MyModule end
Dies liegt an: https://github.com/rails/sprockets-rails/blob/master/lib/sprockets/railtie.rb#L23
quelle
Eigentlich nicht sicher, ob dies hilft, aber es gibt eine Möglichkeit, Ihre eigenen Helfer für die Verwendung während zu definieren
rake precompile
Erstellen Sie einen neuen Initialisierer und fügen Sie diesen ein:
module Sprockets module Helpers module RailsHelper def my_helper_method ... end end end end
Und dann können Sie:
<%= my_helper_method %>
in Ihrem
.erb
Vermögenquelle