Почему я получаю "нет совпадений маршрутов [POST]" в моих вложенных ресурсах? - PullRequest
2 голосов
/ 26 июля 2011

У меня есть проект, содержащий projects с todos с tasks. Когда я пытаюсь создать новое задание, я получаю эту ошибку при отправке:

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

Спасибо

1 Ответ

4 голосов
/ 26 июля 2011

Ваш URL не должен быть new_project_todo_task_path(@project, @todo).Вам не нужно указывать здесь URL, поскольку Rails будет подразумевать его из параметров, переданных в form_for.

Если конечный объект является новым объектом и не сохранен в базе данных, он отправит запрос POST, в данном случае /projects/:project_id/todos.В своем примере вы заявляете, что хотите сделать запрос POST на /projects/:project_id/todos/new, для которого нет маршрута POST, и поэтому он не проходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...