2012-10-03 73 views
0

,我发现了以下错误:的Rails 3.2.1路由错误 - 无路由匹配

Routing Error 

No route matches {:controller=>"tasks", :action=>"complete", :list_id=>1, :id=>nil} 
Try running rake routes for more information on available routes. 

这是我在我的routes.rb文件:

resources :lists do 
    resources :tasks 
end 

match 'lists/:list_id/tasks/:id/complete' => 'tasks#complete', :as => :complete_task 

root :to => 'lists#index' 

在我tasks_controller :

attr_accessor :completed 
before_filter :find_list 

def create 
    @task = @list.tasks.new(params[:task]) 
    if @task.save 
    flash[:notice] = "Task created" 
redirect_to list_url(@list) 
    else 
flash[:error] = "Could not add task at this time." 
redirect_to list_url(@list) 
    end 
end 

def complete 
    @task = @list.tasks.find(params[:id]) 
    @task.completed = true 
    @task.save 
    redirect_to list_url(@list) 
end 

private 
    def find_list 
    @list = List.find(params[:list_id]) 
    end 

而在show.html.erb(其中发生了错误):

<%= button_to "Complete", complete_task_path(@list.id,task.id) %> 

有人能告诉我我做错了什么吗?

+0

您尚未正确定义路径。无论如何,我认为它应该是complete_task_path(task.id,:list_id => @list.id)。实际上,你甚至可以忽略.id部分,因为rails非常聪明。 – vise

回答

1

是什么造成的问题是,在task.id你的表演视图返回零,而在你的路线:

match 'lists/:list_id/tasks/:id/complete' => 'tasks#complete', :as => :complete_task 

需要一个任务ID以URL模式相匹配。

您可以在this blog post中阅读更多关于它的内容。

+0

非常感谢! – Dobabeswe