Вы делали это почти правильно, но вы не совсем следуете соглашению. Позвольте мне объяснить.
Ссылки разработаны, согласно спецификации HTTP, как GET-запросы - поиск данных. Вы не должны использовать ссылки для изменения состояния ресурса. По сути, не используйте ссылки для потенциально разрушительных действий, поскольку за ними может следовать паук или ускоритель. Rails по умолчанию делает каждую ссылку GET-запросом. Итак, когда вы сделали это:
<%= link_to_remote "remove", :url => { :action => "destroy", :id => guest.id } %>
Он сделал запрос GET. Я предполагаю, что у вас есть в вашем файле rout.rb что-то вроде
map.resources: гости
Это создает тонну маршрутов, которые вы можете использовать следующим образом:
<%= link_to_remote "remove", :url => guest_path(guest) %>
Для маршрутов ресурсов в Rails используемый МЕТОД определяет вызываемое действие контроллера.
URL / guest / 1, вызываемый с помощью запроса GET, вызывает действие SHOW. Вы должны указать метод в своем вызове link_to_remote - либо: получить,: положить,: пост или: удалить. : put для обновления,: post для создания,: delete для, ну, в общем, удаления.
<%= link_to_remote "remove", :url => { :action => "destroy", :id => guest.id }, :method => :delete %>
или чище,
<%= link_to_remote "remove", :url => guest_path(guest), :method => :destroy %>
А если серьезно, не используйте ссылки. Используйте кнопки.
<%= button_to_remote "remove", :url => guest_path(guest), :method => :destroy %>
Надеюсь, это поможет!