2014-05-21 40 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页面。请注意帮助。 –

相关问题