Что не так с этой попыткой создать маршрут для удаления записи в RoR? - PullRequest
0 голосов
/ 23 августа 2010

У меня есть модель под названием NoteCategory, которая функционирует как таблица соединения между Notes и категориями.

До этого момента я использовал леса, чтобы делать все в RoR.Я пытаюсь научиться делать некоторые вещи более вручную.

Я хочу, чтобы рядом с каждой категорией в заметке появилась ссылка, которая удалит категорию из заметки.Поэтому мне нужно создать маршрут, который удалит запись из таблицы соединения.

До сих пор я создал контроллер

class NoteCategoriesController < ApplicationController
    def destroy
      notecategory = NoteCategory.find(params[:id])
      notecategory.destroy
      respond_to do |format|
        format.html { redirect_to(notes_url) }
        format.xml  { head :ok }
      end
    end
end

Затем я добавил эту строку в rout.db

map.resources :note_categories

А вот ссылка в представлении:

<%= button_to 'Delete', :confirm => 'Are you sure?', :controller => "notecategories",:action => :destroy %>

Когда я нажимаю кнопку, я получаю это сообщение об ошибке:

No route matches "/notecategories/destroy" with {:method=>:post}

Что я делаюнеправильно?Спасибо за чтение.

Ответы [ 2 ]

1 голос
/ 23 августа 2010

map.resources не создает /$controller/destroy маршрут.Запустите rake routes и посмотрите, что именно у вас есть.

Что касается правильности, эта кнопка 'delete' генерируется командой scaffold для простого приложения CRUD, поэтому она должна работать.

<%= link_to 'Destroy', event, :confirm => 'Are you sure?', :method => :delete %>

edit
Вся страница index.html.erb, сгенерированная командой scaffold.Это должно дать вам общее представление.

<h1>Listing events</h1>

<table>
  <tr>
    <th>Name</th>
    <th>Budget</th>
  </tr>

<% @events.each do |event| %>
  <tr>
    <td><%=h event.name %></td>
    <td><%=h event.budget %></td>
    <td><%= link_to 'Show', event %></td>
    <td><%= link_to 'Edit', edit_event_path(event) %></td>
    <td><%= link_to 'Destroy', event, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New event', new_event_path %>
0 голосов
/ 23 августа 2010

попробовать:

<%= button_to 'Delete', :confirm => 'Are you sure?', :controller => "notecategories",:action => :destroy, :method => :delete %>

Обратите внимание: метод

Это из-за того, что маршруты RESTful используют эти слова действий PUT, DELETE, POST и т. Д. Вместе с путями (т. Е. / Notecategories / destroy with: delete вместе для уничтожения записей)

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