0

我有一個Rails 4安裝的發動機MyEngine軌道4置發動機Rspec的網址添加PARAMS兩次

裏面一個lib模塊我使用url_helper來找到一個途徑。

MyEngine::Engine.routes.url_helpers.send("test_controller_url",{:id => 1, :lang => I18n.locale}) 

而且我與default_url_optionsspec/spec_helper.rb這樣的配置rspec

class ActionView::TestCase::TestController 
    def default_url_options(options={}) 
    { :params => { :lang => I18n.default_locale }, :host => "test.host" }.merge options 
    end 
end 

class ActionDispatch::Routing::RouteSet 
    def default_url_options(options={}) 
    { :params => { :lang => I18n.default_locale }, :host => "test.host" }.merge options 
    end 
end 

所得url我從通話期待是:

http://test.host/controller/1/test?lang=en 

但我得到url

http://test.host/?lang=en/controller/1/test?lang=en 

我做了一些調試到actionpack/action_dispatch/http/url.rbactionpack-4.0.1rails

是前來url_for方法的選項有:

{ 
    :params=>{:lang=>:en}, 
    :host=>"test.host", 
    :use_route=>"my_engine", 
    :only_path=>true, 
    :lang => :en, 
    :path=>"/", 
    :script_name=>nil, 
    :user=>nil, 
    :password=>nil 
} 

{ 
    :params=>{:lang=>:en}, 
    :host=>"test.host", 
    :action=>"test", 
    :controller=>"my_engine/controller", 
    :use_route=>"test_controller", 
    :only_path=>false, 
    :id=>1, 
    :path=>"/controller/1/test", 
    :script_name=>"/?lang=en", 
    :user=>nil, 
    :password=>nil 
} 

而在dummy Rails應用程序內spec/dummy/config/routes.rb我已經安裝了engine有:

mount MyEngine::Engine, :at => "/" 

它似乎產生畸形url只有rspec,甚至不與rails console

我也注意到,有對url_for正在取得兩個電話,一個是engine,一個用於實際path

我在這裏做錯了什麼?它是一個配置的東西還是有一個實際的錯誤?

回答

0

default_url_options刪除:params:lang伎倆。