Pergunta

Como faço para destruir a própria associação e deixar os objetos que estão sendo associados sozinho, mantendo esta RESTful?

Especificamente, eu tenho esses modelos:

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

Isso é dizer que o evento é :surveyable (ModelSurvey belongs_to Event). A minha pergunta é, sem ter que criar uma ModelSurveysController, como faço para destruir o ModelSurvey, deixando o Event e Survey sozinho?

Algo com map.resources :events, :has_many => :model_surveys? Eu não estou muito certo o que fazer nesta situação. O que precisa acontecer com as rotas, e que precisa acontecer no controlador? Eu estou esperando que a url poderia ser algo como isto:

/events/:title/model_surveys/:id

Obrigado por sua ajuda, Lance

Foi útil?

Solução

No Rails 2.3 você tem accepts_nested_attributes_for que iria deixá-lo passar um array de ModelSurveys para o evento em questão. Se você permitir que destruir através da declaração atributos aninhados, você vai ser capaz de passar event[model_surveys][1][_destroy]=1 ea associação será removida. Confira o api docs .

Outras dicas

domínio Recursos! = Domínio modelo


O domínio do controlador não é a mesma que a dos modelos. É perfeitamente possível atualizar vários modelos, alterando o estado de um recurso.

No seu caso o que significa fazer um PUT ou POST, quer ao evento ou a Pesquisa que contém uma lista de ids para o outro. O modelo para um vai atualizar a associação.

PUT ou POST

Algumas pessoas (mas não Roy Fielding ) acreditam que você deve usar um PUT para atualizar o recurso e fornecer todo o estado de novo, outros acham que um POST com o estado parcial (ala PATCH) é suficiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top