Используя флажок для удаления объекта в рельсах? - PullRequest
1 голос
/ 04 октября 2011

У меня есть следующая форма:

<%= form_for(@subscription = @task.subscriptions.build(:user_id => subscribers.id)) do |f| %>   
    <%= f.check_box :subscribed, :class => 'submittable' %>
    <%= f.label :subscribed, subscribers.full_name %>
    <%= f.hidden_field :user_id, :value => subscribers.id %> 
    <%= f.hidden_field :task_id, :value => @task.id %>
<% end %>

Класс 'submittable' на флажке вызывает отправку формы (через jQuery) при обновлении.

:возвращается через метод в модели, который возвращает информацию о том, подписан пользователь или нет - его нельзя изменить напрямую.

Контроллер доступен здесь: http://pastebin.com/zZy6KcXz - это стандартный каркас.

Когда я нажимаю флажок, подписка успешно создается, но я не могу понять, как заставить ее удалить подписку, если она не отмечена.

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

cjm, в ответ на ответ jimworm метод контроллера destroy вызывается, когда вы удаляете (HTTP-глагол, на самом деле это POST с пропущенным полем _method=DELETE, так как некоторые браузеры не поддерживают DELETE глагол.

как он сказал:

<%= link_to 'Delete', @model, :confirm=> 'Are you sure?', :method=> :delete %>

Маршрут совпадает с вашим show или GET /models/1, но вместо него используется глагол DELETE,

DELETE /models/1

что на самом деле

POST /models/1 со скрытым полем _method=DELETE, переданным для поддержки всех браузеров.

Как он также упомянул, Rails автоматически определяет, какое действие использовать при использовании form_for, проверяя, является ли @model new_record? (пока нет id) или существующим. Затем он выберет

POST /models для create

или

PUT /models/1 для update

0 голосов
/ 04 октября 2011

Это form_for @subscription, поэтому он, вероятно, будет подчиняться действиям create или update, которые не разрушают модели.Вы можете взломать действие или модель, чтобы уничтожить ее при создании (!) / Обновлении.Вероятно, действие ... обновление модели для этого хака дает мне heeby-jeebies.

Путь Rails ™ к методу DELETE и переход к маршруту уничтожения - это ссылка, подобная этой:

<%= link_to 'Delete', @model, :confirm=> 'Are you sure?', :method=> :delete %>

Остерегайтесь IE9.Если вы позволите вашим перенаправлениям перейти на другое «удаляемое», оно потенциально пойдет по цепочке и удалит всю вашу базу данных.http://techno -weenie.net / 2011/8/19 / ie9-deletes-stuff /

Правильное перенаправление после успешных POST, PUT и DELETE:

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