0

Rails 4 を搭載したエンジンを持っていますMyEngine

libモジュール内で、を使用しurl_helperてルートを検索しています。

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

そして、私はこのように設定rspecしましdefault_url_optionsspec/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.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内部のレールアプリケーションで、次のものspec/dummy/config/routes.rbをマウントしengineました:

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

urlでのみ、rspecでもではなく、奇形を生成するようですrails console

また、 に対して 1つと実際の に対してurl_for1 つの2 つの呼び出しが行われていることにも気付きました。enginepath

ここで何が間違っていますか?それは構成の問題ですか、それとも実際のバグですか?

4

1 に答える 1