我有一个安装在 Rails 4 上的引擎MyEngine
在lib
模块内部,我使用url_helper
来查找路线。
MyEngine::Engine.routes.url_helpers.send("test_controller_url",{:id => 1, :lang => I18n.locale})
我已经像这样配置rspec
了default_url_options
in spec/spec_helper.rb
。
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.rb
in actionpack-4.0.1
of进行了一些调试rails
。
该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
,一个用于 the engine
,一个用于实际path
。
我在这里做错了什么?是配置问题还是存在实际错误?