【问题标题】:Rails -- namespaced routing to path helpersRails -- 命名空间路由到路径助手
【发布时间】:2013-10-04 20:06:22
【问题描述】:

我有以下路由规则:

get '/reports/stats_by_date', to: 'reports#stats_by_date'

而 rake 路线给了我这个:

reports_stats_by_date GET    /reports/stats_by_date(.:format)         reports#stats_by_date

这看起来是正确的。所以我试图用这个函数在 rake 中测试我的控制器:

def test_reports_should_load    
  get :reports_stats_by_date, :start_date => '2013-10-01', :end_date => '2013-10-05', :format => :json
  assert_response :success
end

很简单。但是当我运行 rake test 时,出现以下错误:

ReportsControllerTest#test_reports_should_load:
ActionController::UrlGenerationError: No route matches {:start_date=>"2013-10-01", :end_date=>"2013-10-05", :format=>:json, :controller=>"reports", :action=>"reports_stats_by_date"}
test/controllers/reports_controller_test.rb:6:in `test_reports_should_load'

由于某种原因,Rails 试图在路由明确指向reports#stats_by_date 时加载动作:reports_stats_by_date。我在这里做错了什么?

【问题讨论】:

  • 在你的 test_reports_should_load 中尝试获取 '/reports/stats_by_date', :start_date => '2013-10-01', :end_date => '2013-10-05', :format => :json . get 通常期望操作名称作为符号而不是辅助方法。让我知道这是否有效
  • 不。现在我得到 No route matches ... :action=>"reports/stats_by_date"
  • 那么这肯定可以工作 get :stats_by_date , :start_date => '2013-10-01', :end_date => '2013-10-05', :format => :json 。现在我给出了动作名称而不是路径

标签: ruby-on-rails routes


【解决方案1】:

我认为这是因为您只需要引用动作名称,而不是路径的名称。 stats_by_date 而不是 reports_stats_by_date

 def test_reports_should_load    
  get :stats_by_date, :start_date => '2013-10-01', :end_date => '2013-10-05', :format => :json
  assert_response :success
end

【讨论】:

  • 好的,这行得通。有人可以向我解释 Rails 如何处理不同命名空间下的两条冲突路由吗?例如,/reports/stats_by_date 与 /charts/stats_by_date。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2019-01-24
  • 2018-05-24
  • 1970-01-01
相关资源
最近更新 更多