2012-10-03 94 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