ActionView :: Template ::错误:未定义的方法`SOMETHING_path'一堂课?

时间:2014-05-21 17:12:13

标签: ruby-on-rails routing

以上错误是我尝试为待办事项列表应用程序创建新资源时收到的错误。完整错误如下所示:

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, only: [:new]

以下链接解决了我在路线中使用以下代码时的问题:

resources :tasks

我想知道的是为什么会这样。对于这个简单的Web应用程序,我将只使用:new,:create,:edit和:destroy。我正在做测试驱动的开发,我只是想做对。此外,我的错误说有一个未定义的方法&#39; tasks_path&#39;但我不确定那是指什么。我的spec文件具有&#39; new&#39;的正确缩写。路线。发生了什么事?

以下是我的spec文件以防万一。

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 个答案:

答案 0 :(得分:1)

tasks_path是一个命名路由,恰好引用:index动作(因为复数词“任务”而知道,并且没有传递给它的参数。你可以看到所有的通过运行bundle exec rake routes,Rails知道的应用程序的路由,命名路由和路径。

在您的情况下,由于您只需要:new路由,因此指定的路由应为new_task_path

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

Example Routes