2011-01-05 2 views
5

Я хотел бы удалить несколько объектов одного типа с помощью контроллера RESTful.Удалить несколько объектов в Rails с помощью RESTful-контроллера?

Самая простая вещь, о которой я могу думать, - это заставить уничтожить действие, ожидающее уничтожения объектов уничтоженных объектов, разделенных запятыми.

Есть ли более элегантный способ сделать это?

ответ

-1

Вот как RESTful запрос может выглядеть.

POST /posts/delete_multiple HTTP/1.1 
Host: www.example.com 

post_ids[]=33&post_ids[]=47&post_ids[]=88 

Обратите внимание, что в то время как GET, PUT и DELETE имеют весьма специфические значения в контексте REST, POST более расплывчатым и по сути означает, что принять какое-либо действие. Действие, которое нужно предпринять, указывается в URL-адресе, а дополнительные данные, относящиеся к действию, передаются в сущности (теле) запроса. Используйте только POST таким образом, когда GET, PUT и DELETE не имеют предполагаемого значения.

POST обычно интерпретируется как «создать», но это не совсем правильно. Мы обычно используем POST для создания новых ресурсов, когда клиент не знает, каким должен быть URL-адрес вновь созданного ресурса. Но когда клиент получает определение URL-адреса вновь созданного ресурса, правильным глаголом будет PUT.

+0

Данный пример является стиль архитектуры RPC, где предполагаемый операция определяется в URI, а не методом HTTP. Кроме того, POST четко определен в [разделе 9.5] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5) стандарта HTTP. Хотя стандарт указывает, что POST можно использовать для передачи данных в процесс обработки данных, который не делает использование метода POST RESTful. Подход RESTful будет состоять в том, чтобы определить новый ресурс, представляющий коллекцию других ресурсов, а затем удалить эту коллекцию. –

+0

ОК, затем 'POST/posts/batch_deletes' с тем же сущностью. Под-ресурс (ресурс «Post :: BatchDelete») будет создан, но затем будет немедленно запускаться за кадром и мгновенно уничтожаться. Эффект запуска подресурса заключается в том, что все сообщения, перечисленные в этом под-ресурсе, также уничтожаются. – yfeldblum

+1

Но требуя двух запросов на удаление нескольких ресурсов, не успокаивается (в частности, * требование *, что * он должен быть таким образом * не успокаивается). Это просто медленно, потому что для этого требуются два цикла запроса-ответа, а не один. – yfeldblum

2

Вы можете использовать вложенные формы для него ..

См http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

Я думаю будет самой элегантной версии ...

<% form_for @person do |person_form| %> 

    <%= person_form.label :name %> 
    <%= person_form.text_field :name %> 

    <% person_form.fields_for :children do |child_form| %> 

    <%= child_form.label :name %> 
    <%= child_form.text_field :name %> 

    <% unless child_form.object.new_record? %> 
    <%= child_form.check_box '_delete' %> 
    <%= child_form.label '_delete', 'Remove' %> 
    <% end %> 
    <% end %> 

    <%= submit_tag %> 
<% end %> 
Смежные вопросы