【问题标题】:Rails 4 Mounted Engine Rspec Url adding params twiceRails 4 Mounted Engine Rspec Url添加参数两次
【发布时间】: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 中配置了rspecdefault_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.1rails 中对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


    【解决方案1】:

    default_url_options 中删除:params:lang 就成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2011-10-26
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多