2013-10-04 133 views
0

我有以下路徑規則:導軌 - 命名空間的路由路徑的助手

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

耙路線給了我這樣的:

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

這看起來是正確的。所以我試圖從這個功能的耙子內測試我的控制器:

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測試,我得到以下錯誤:

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當路線明確指出報告#stats_by_date。我在這裏做錯了什麼?

+0

在你test_reports_should_load嘗試得到 '/報告/ stats_by_date',:START_DATE => '2013年10月1日',:END_DATE => '2013年10月5日',:格式=> :JSON。 get通常期望一個動作名稱作爲符號而不是輔助方法。讓我知道這是否工作 – Raghu

+0

不。現在我得到了沒有路線匹配...:action =>「reports/stats_by_date」 –

+0

然後這應該肯定會得到:stats_by_date,:start_date =>'2013-10-01',:end_date =>'2013-10 -05',:format =>:json。現在,即時通訊給予行動名稱,而不是路徑 – Raghu

回答

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 
+0

好,這是工作。有人能向我解釋Rails如何在不同的命名空間下處理兩條相互衝突的路線嗎?例如,/ reports/stats_by_date vs/charts/stats_by_date。 –