Rails 4 を搭載したエンジンを持っていますMyEngine
lib
モジュール内で、を使用しurl_helper
てルートを検索しています。
MyEngine::Engine.routes.url_helpers.send("test_controller_url",{:id => 1, :lang => I18n.locale})
そして、私はこのように設定rspec
しましdefault_url_options
た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
of でデバッグをactionpack/action_dispatch/http/url.rb
行いました。actionpack-4.0.1
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
内部のレールアプリケーションで、次のものspec/dummy/config/routes.rb
をマウントしengine
ました:
mount MyEngine::Engine, :at => "/"
url
でのみ、rspec
でもではなく、奇形を生成するようですrails console
また、 に対して 1つと実際の に対してurl_for
1 つの2 つの呼び出しが行われていることにも気付きました。engine
path
ここで何が間違っていますか?それは構成の問題ですか、それとも実際のバグですか?