/ / Il controller definito all'interno di un modulo cambia tutte le rotte nel suo ambito: ruby-on-rails, actioncontroller

Il controller definito all'interno di un modulo cambia tutte le rotte nel suo ambito: ruby-on-rails, actioncontroller

Se definisco un percorso all'interno di un modulo, in questo modo:

class DrivenSignupPlugin::AccountController < ApplicationController
...
end

Quindi tutte le chiamate a url_for (Compreso redirect_to) al suo interno verrà aggiunto il prefisso :controller parametro con driven_signup_plugin/.

Questo non è il comportamento desiderato poiché questo controller utilizza molti percorsi al di fuori di esso. Per esempio, render_access_denied è un metodo da ApplicationController.

risposte:

0 per risposta № 1

Per ovviare a questo, aggiungere questo metodo al controller:

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

Per Rails 4.2+, è necessario qualcosa di più complicato:

  # 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