RESTful уничтожить полиморфную ассоциацию в Rails? - PullRequest
2 голосов
/ 10 февраля 2010

Как мне уничтожить саму ассоциацию и оставить объекты связанными в покое, сохраняя этот 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

Спасибо за вашу помощь, Lance

Ответы [ 2 ]

3 голосов
/ 10 февраля 2010

В Rails 2.3 у вас есть accepts_nested_attributes_for, который позволит вам передать массив ModelSurveys к рассматриваемому событию. Если вы разрешите уничтожить через объявление вложенных атрибутов, вы сможете передать event[model_surveys][1][_destroy]=1, и связь будет удалена. Проверьте API документы .

1 голос
/ 10 февраля 2010

Ресурсный домен! = Модельный домен


Домен контроллера не совпадает с доменом моделей. Это прекрасно для обновления нескольких моделей путем изменения состояния ресурса.

В вашем случае это означает выполнение PUT или POST для события или опроса, который содержит список идентификаторов для другого. Модель для одного обновит ассоциацию.

PUT или POST

Некоторые люди (но не Рой Филдинг ) считают, что вам следует использовать PUT для обновления ресурса и предоставления всего состояния снова, другие считают, что POST с частичным состоянием (ala PATCH) достаточно.

...