模块内定义的控制器将所有路由更改为其范围

时间:2015-06-26 23:06:56

标签: ruby-on-rails actioncontroller

如果我在模块中定义一个路径,如下所示:

class DrivenSignupPlugin::AccountController < ApplicationController
  ...
end

然后,对其中url_for(包括redirect_to)的所有来电都会在:controller参数前加上driven_signup_plugin/

这不是所需的行为,因为此控制器在其外部使用许多路径。例如,render_access_denied是来自ApplicationController的方法。

1 个答案:

答案 0 :(得分:0)

要解决此问题,请将此方法添加到控制器:

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

对于Rails 4.2+,需要更复杂的东西:

  # 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