rails form_tag form examples ruby-on-rails ruby url model helper

ruby on rails - form_tag - Cómo acceder al módulo URL helper from rails



routes rails examples (5)

Aquí es cómo lo hago en cualquier contexto sin include

routes = Rails.application.routes.url_helpers url = routes.some_path

Eso funciona en cualquier contexto. Si intenta include url_helpers, asegúrese de hacerlo en el lugar correcto, por ejemplo, esto funciona

module Contact class << self include Rails.application.routes.url_helpers end end

y esto no funciona

module Contact include Rails.application.routes.url_helpers class << self end end

Un ejemplo más con las pruebas de Capibara

feature ''bla-bla'' do include Rails.application.routes.url_helpers path = some_path #unknown local variable some_path end

y ahora el correcto

include Rails.application.routes.url_helpers feature ''bla-bla'' do path = some_path #this is ok end

Tengo un módulo con una función. Reside en /lib/contact.rb:

module Contact class << self def run(current_user) ... end end end

Quiero acceder a los ayudantes de URL como ''users_path'' dentro del módulo. ¿Cómo puedo hacer eso?


En tu módulo, solo realiza una:

include Rails.application.routes.url_helpers


He estado luchando con las sutilezas que el ayudante espera del controlador y la pila predeterminados ( default_url_options , etc.) y no quise codificar el host.

Nuestros auxiliares de URL son proporcionados por nuestro ingenioso módulo, por supuesto:

include Rails.application.routes.url_helpers

Pero incluya esto tal como está, y (1) el ayudante buscará default_url_options , y (2) no sabrá sobre el host de la solicitud ni la solicitud.

La parte del host proviene de las url_options la instancia del url_options . Por lo tanto, paso el contexto del controlador a mi módulo anterior, ahora una clase:

class ApplicationController def do_nifty_things HasAccessToRoutes.new(self).render end end class HasAccessToRoutes include Rails.application.routes.url_helpers delegate :default_url_options, :url_options, to: :@context def initialize(context) @context = context end def render nifty_things_url end end

Puede que no se ajuste a todos los casos, pero me ha sido útil al implementar un tipo de procesador personalizado.

De cualquier manera:

  • si desea acceder a las opciones de url predeterminadas a la perfección, o al host de la solicitud, debe pasar el contexto del controlador / solicitud en
  • si solo necesita la ruta, no hay un host, y no le importan las opciones de la url, puede hacer algunos métodos simulados.

La delegación a url_helpers parece mucho mejor que incluir todo el módulo en su modelo

delegate :url_helpers, to: ''Rails.application.routes'' url_helpers.users_url => ''www.foo.com/users''

reference


delegate :url_helpers, to: ''Rails.application.routes'' url_helpers.users_url => ''www.foo.com/users''

para Augustin Riedinger, ese código de delegación necesita referirse a url_helpers (plural), de lo contrario se obtiene

método indefinido `url_helper ''