2013-04-26 2 views
0

Я пишу простое приложение todo, в котором проекты и проекты имеют много задач. Я хочу удалить задачу из проекта. Но когда я пытаюсь связать с методом delete, я получаю undefined метод «task_path».Rails delete link Вложенные маршруты

посмотреть код

<ul> 
    <% @project.tasks.each do |task| %> 
    <li><%= task.name %></li> <%= link_to "delete", task, :method => :delete %></br> 
    <% end %> 
</ul> 

задачи контроллер

def destroy 
    @project = Project.find(params[:project_id]) 
    @task = @project.tasks.find(params[:id]) 
    @task.destroy 
    redirect_to @project, :notice => "Task Deleted" 
    end 

routes.rb

resources :projects do 
    resources :tasks 
    end 

Update: Так что я удалить работать. Но теперь, когда я повторяю каждую задачу, есть дополнительная ссылка на удаление, которая маршрутизируется на http://todoapp.dev/projects/9/tasks и не дает никаких сопоставлений маршрутов [DELETE] "/ projects/9/tasks". Почему добавлена ​​дополнительная ссылка на удаление?

<% @project.tasks.each do |task| %> 
    <%= task.name %> <%= link_to "delete", [@project, task], :method => :delete %> 
    <% end %> 

enter image description here

enter image description here

+0

Посмотрите [Руководство по Rails: Вложенные ресурсы] (http://guides.rubyonrails.org/routing.html#nested-resources). – Pigueiras

+0

Возможно, вам нужен идентификатор проекта, не могли бы вы опубликовать то, что вы получили после запуска «рейк-маршрутов»? –

ответ

7

Пожалуйста, попробуйте следующее:

<%= link_to "delete", [@project, task], :method => :delete %> 

и дайте мне знать

+0

Это сработало для меня. Похоже, мне пришлось передать переменную @project, чтобы получить путь к задаче. Благодаря! – nulltek

+0

В моем обновленном вопросе выше добавлено дополнительное удаление. Не знаю, почему это так. Что я делаю не так? – nulltek

+0

wha '<% = debug @ project.tasks%>' output? ! –

0

rake routes Запуск вы увидите, что удаление отображается project_task.

Вы можете использовать

<ul> 
    <% @project.tasks.each do |task| %> 
    <li><%= task.name %></li> <%= link_to "delete", project_task_path(@project, task), :method => :delete %></br> 
    <% end %> 
</ul> 
+0

Это имеет смысл. Но когда я пытаюсь это сделать и удалю задачу, я получаю следующее. Ни один маршрут не сопоставляется {: action => "show",: controller => "tasks",: project_id => # ,: id => # <Идентификатор задачи: nil, name: nil, created_at: nil, updated_at: nil, project_id: 9, завершено: false> } – nulltek

+0

Hmmm .. Это означает, что метод был установлен неправильно: delete, чтобы он выполнял обычный запрос на получение. Кстати, в вашем комментарии, как вы собираетесь удалить задачу, если она равна нулю? –

+0

Я не уверен в этом. Я не уверен, почему это будет выглядеть как ноль. Любые мысли по этому поводу? – nulltek

Смежные вопросы