type - Usar un método de ayuda de Rails dentro de un activo de JavaScript
llamar js desde html (5)
De hecho, estoy de acuerdo con @eirc answer (teniendo en cuenta la documentación de Sprockets). Pero consideraría incluir módulos auxiliares en el tiempo de arranque de los rieles. Según
# config/initializers/sprockets.rb
Rails.application.assets.context_class.instance_eval do
include ActionView::Helpers
include Rails.application.routes.url_helpers
include MyModule
end
esto se debe a: https://github.com/rails/sprockets-rails/blob/master/lib/sprockets/railtie.rb#L23
¿Hay alguna forma de utilizar un método de ayuda de Rails, más específicamente, un método de ayuda de ruta dentro de un archivo de activos de JavaScript. Este archivo foo.js.coffee.erb
$(''#bar'').val("<%= create_post_path %>")
Me encantaría si pudiera obtener de erubis
$(''#bar'').val("path/to/create")
En realidad, no estoy seguro de si esto ayuda, pero hay una manera de definir sus propios ayudantes para su uso durante la rake precompile
Crea un nuevo inicializador y ponlo en él:
module Sprockets
module Helpers
module RailsHelper
def my_helper_method
...
end
end
end
end
Y luego puedes:
<%= my_helper_method %>
en sus activos .erb
Esto también hará el truco en un inicializador:
Sprockets::Context.send :include, MyHelper
En el modo de desarrollo, el ayudante no se volverá a cargar en cada solicitud.
Su enfoque con UrlHelpers funcionará hasta que necesite encontrar post_path(...um...we don''t know what post id we''ll need at compile time...)
. Hay una gema de rubí que reimplanta todos los Rails UrlHelpers en JavaScript: https://github.com/railsware/js-routes
No estoy muy seguro, por qué quieres hacer esto.
Evitará que el archivo javascript se almacene en caché, ya que contiene un valor dinámico
Tendría un acoplamiento entre su javascript / coffeescript y rieles
De ser posible, le aconsejaría que resuma su problema al proporcionar su ruta de destino en la vista y recuperar el valor del elemento DOM cuando ocurra el evento específico. Al igual que los "discretos adaptadores de scripting" para Rails do. Ejemplo: https://github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173
Puede incluir cualquier helper / module / class en una plantilla erb con:
<% environment.context_class.instance_eval { include MyHelper } %>
Ver: https://github.com/rails/sprockets/blob/master/lib/sprockets/environment.rb y https://github.com/rails/sprockets/blob/master/lib/sprockets/context.rb
Para utilizar los ayudantes de url, debe incluir los ayudantes de sus aplicaciones específicas.
Están disponibles en Rails.application.routes.url_helpers
así que:
<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
EDITAR: Se corrigieron los enlaces al repositorio de piñones movidos, pero no estoy seguro de que esto tenga sentido tantos años después.