2014-05-21 38 views
1

上述錯誤是我在嘗試爲我的待辦事項列表應用程序創建新資源時收到的。完整的錯誤如下所示:ActionView :: Template :: Error:一個類未定義的方法`SOMETHING_path'?

Failure/Error: visit new_task_path 
ActionView::Template::Error: 
undefined method `tasks_path' for #<#<Class:0x00000103d814a0>:0x00000103d805a0> 
./app/views/tasks/new.html.erb:1:in 
`_app_views_tasks_new_html_erb__695406873618378309_2179930000' 
# ./spec/features/create_task_spec.rb:10:in `block (2 levels) in <top (required)>' 

所有我在我的路線文件中是這行代碼。

resources :tasks 

我想知道的是爲什麼會這樣:

resources :tasks, only: [:new] 

,當我用我的路線這行代碼下面的鏈接修正我的問題。對於這個簡單的Web應用程序,我將只使用:new,:create,:edit和:destroy。我正在做測試驅動開發,我只是想把它做好。另外,我的錯誤說有一個未定義的方法'tasks_path',但我不確定那是指什麼。我的規格文件有'新'路線的正確縮寫。這是怎麼回事?

以下是我的規格文件,以防萬一。

scenario 'with valid task attributes' do 
initial_task_count = Task.count 
visit new_task_path 
fill_in "Name", with: "Daniel Rubio" 
fill_in "Description", with: "Grocery Shopping" 
select "2014", from: "Year" 
select "May", from: "Month" 
select "21", from: "Day" 
select "Low", from: "Importance" 
click_on "Create Task" 
expect(page).to have_content("Grocer Shopping") 
expect(Task.count).to eql(initial_task_count + 1) 

Workaround

回答

1

tasks_path是恰好指:index行動(因爲複數形式的「任務」字和缺少參數已知被傳遞給它命名路線。您可以通過運行bundle exec rake routes來查看Rails通過運行bundle exec rake routes瞭解的所有路由,命名路由和路徑。

對於您的情況,由於您只需要:new路線,指定路線應爲new_task_path

您還可以在Rails Guide on routing中找到更多有用的信息。

Example Routes

+0

感謝@pdobb的回覆。我已經在我的spec文件中定義了new_task_path,如我的問題所示,但是你是對的,即使我不知道爲什麼,添加索引路徑也會修復我的問題。 –

+0

您的視圖文件('app/views/tasks/new.html.erb')似乎是指第1行的'tasks_path'。我不確定您是否正在考慮這個權利。當您添加一個路由到'routes.rb'文件,創建一個命名路由,您的應用可以使用該路徑來引用該網址。所以,直到你在routes.rb文件中指定':index'動作,你纔沒有定義名爲route的'tasks_path'。這就是爲什麼添加它來解決問題的原因。但是如果你不想指定一個索引操作,那麼只要確保你不要引用它(即從視圖文件中刪除對'tasks_path'的調用。 – pdobb

+0

我現在明白了,應用程序路徑現在可以工作了。我不理解我的簡單表單必須位於初始頁面(索引)才能訪問new.html頁面。請注意幫助。 –

相關問題