RESTполностью уничтожить полиморфную ассоциацию в Rails?
-
19-09-2019 - |
Вопрос
Как мне уничтожить саму ассоциацию и оставить связанные объекты в покое, сохранив при этом RESTful?
Конкретно у меня есть такие модели:
class Event < ActiveRecord::Base
has_many :model_surveys, :as => :surveyable, :dependent => :destroy, :include => :survey
has_many :surveys, :through => :model_surveys
end
class ModelSurvey < ActiveRecord::Base
belongs_to :survey
belongs_to :surveyable, :polymorphic => true
end
class Survey < ActiveRecord::Base
has_many :model_surveys
end
Это говорит о том, что Событие :surveyable
(ModelSurvey belongs_to Event
).Мой вопрос в том, что без необходимости создавать ModelSurveysController
, как мне уничтожить ModelSurvey
, выходя из Event
и Survey
один?
Что-то с map.resources :events, :has_many => :model_surveys
?Я не совсем понимаю, что делать в этой ситуации.Что должно произойти с маршрутами и что должно произойти в контроллере?Я надеюсь, что URL-адрес может выглядеть примерно так:
/events/:title/model_surveys/:id
Спасибо за вашу помощь, Ланс
Решение
В Rails 2.3 у вас есть accepts_nested_attributes_for
, который позволил бы вам передать массив ModelSurveys для рассматриваемого события. Если вы позволите уничтожить через декларацию вложенных атрибутов, вы будете иметь возможность пройти event[model_surveys][1][_destroy]=1
и ассоциация будет удалены. Отъезд апи документы .
Другие советы
Домен ресурсов != домен модели
Домен контроллера не такой, как у моделей.Совершенно нормально обновлять несколько моделей, изменяя состояние ресурса.
В вашем случае это означает выполнение PUT или POST либо к событию, либо к опросу, который содержит список идентификаторов для другого.Модель для одного обновит ассоциацию.
ПУТЬ или ОТПРАВИТЬ
Некоторые люди (но не Рой Филдинг) считают, что вам следует использовать PUT для обновления ресурса и повторного предоставления всего состояния, другие считают, что POST с частичным состоянием (аля PATCH) достаточен.