/ / Controlador definido dentro de un módulo cambia todas las rutas a su alcance - ruby-on-rails, actioncontroller

El controlador definido dentro de un módulo cambia todas las rutas a su alcance - ruby-on-rails, actioncontroller

Si defino una ruta dentro de un módulo, así:

class DrivenSignupPlugin::AccountController < ApplicationController
...
end

Entonces todas las llamadas a url_for (incluso redirect_to) en su interior será el prefijo :controller parámetro con driven_signup_plugin/.

Este no es el comportamiento deseado ya que este controlador usa muchas rutas fuera de él. Por ejemplo, render_access_denied es un metodo de ApplicationController.

Respuestas

0 para la respuesta № 1

Para solucionar esto, agregue este método al controlador:

  def default_url_options
# avoid rails" use_relative_controller!
{use_route: "/"}
end

Para Rails 4.2+, se necesita algo más complicado:

  # inherit routes from core skipping use_relative_controller!
def url_for options
options[:controller] = "/#{options[:controller]}" if options.is_a? Hash and options[:controller]
super options
end
helper_method :url_for