2011-07-26 43 views
2

我有一個項目,其中包含projectstodostasks。當我嘗試創建一個新的任務,我得到這個錯誤,當我提出:爲什麼我在嵌套的資源中找到「沒有路由匹配[POST]」?

No route matches [POST] "/projects/1/todos/19/tasks/new" 

這裏是我的形式:

<%= form_for [@todo, @todo.tasks.new], :url => new_project_todo_task_path(@project, @todo) do |f| %> 

     <div class="field"> 
      <%= f.label :description, "Description" %><br /> 
      <%= f.text_area :description %> 
     </div> 
     <div class="actions"> 
      <%= f.submit %> or <%= link_to "Cancel", "#", :id => "cancel_new_task_link" %> 
     </div> 

    <% end %> 

這裏是我的控制器:

class TasksController < ApplicationController 
    before_filter :authenticated? 
    before_filter :get_project_and_todo 

    respond_to :html, :xml, :json, :js 

    def new 
    @task = @todo.tasks.new 
    end 

    def create 
    @task = @todo.tasks.new(params[:task]) 
    if @task.save 
     respond_with @todo, :location => project_todo_path(@project, @todo) 
    else 
     render "new" 
    end 
    end 

    private 

    def get_project_and_todo 
    @project = Project.find(params[:project_id]) 
    @todo = @project.todos.find(params[:todo_id]) 
    end 


end 

這裏有我的路線:

resources :projects do 
    resources :todos do 
     resources :tasks 
    end 
end 

謝謝

回答

4

您的網址不應該是new_project_todo_task_path(@project, @todo)。您不需要在這裏指定URL,因爲Rails將通過傳遞給form_for的參數來暗示它。

如果最後一個對象是一個新對象,並且沒有保存在數據庫中,那麼它將發出POST請求,在這種情況下,該請求爲/projects/:project_id/todos。你在你的例子中聲明你想要POST請求/projects/:project_id/todos/new,對此沒有POST路由,這就是它失敗的原因。

+0

謝謝。這就說得通了。這是我用的:\t \t <%= form_for [@project,@todo,@todo.tasks.new] do | f | %> – cbmeeks

相關問題