【发布时间】:2013-11-15 05:55:38
【问题描述】:
我有一个安装在 Rails 4 上的引擎 MyEngine
在lib 模块中,我使用url_helper 来查找路线。
MyEngine::Engine.routes.url_helpers.send("test_controller_url",{:id => 1, :lang => I18n.locale})
我已经像这样在spec/spec_helper.rb 中配置了rspec 和default_url_options。
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-4.0.1 的rails 中对actionpack/action_dispatch/http/url.rb 进行了一些调试。
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
}
在spec/dummy/config/routes.rb 内的dummy rails 应用程序中,我安装了engine:
mount MyEngine::Engine, :at => "/"
它似乎只用rspec 产生格式错误的url,甚至用rails console 也没有
我还注意到有两个调用url_for,一个用于engine,一个用于实际的path。
我在这里做错了什么?是配置问题还是存在实际错误?
【问题讨论】:
标签: ruby-on-rails rspec ruby-on-rails-4 rspec-rails rails-engines