Question

Comment puis-je détruire l'association elle-même et laisser les objets étant seuls associés, tout en gardant cette RESTful?

Plus précisément, j'ai ces modèles:

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

Cela dit que l'événement est :surveyable (ModelSurvey belongs_to Event). Ma question est, sans avoir à créer un ModelSurveysController, comment puis-je détruirai le ModelSurvey, tout en laissant le Event et Survey seul?

Quelque chose avec map.resources :events, :has_many => :model_surveys? Je ne suis pas tout à fait sûr de ce qu'il faut faire dans cette situation. Ce qui doit se produire avec les routes, et ce qui doit arriver dans le contrôleur? J'espère que l'URL pourrait ressembler à ceci:

/events/:title/model_surveys/:id

Merci pour votre aide, Lance

Était-ce utile?

La solution

Dans Rails 2.3, vous avez accepts_nested_attributes_for qui vous laisser passer un tableau de ModelSurveys à l'événement en question. Si vous permettez à détruire par la déclaration d'attributs imbriqués, vous serez en mesure de passer event[model_surveys][1][_destroy]=1 et l'association sera supprimée. Consultez le docs api.

Autres conseils

Domaine Ressources! = Domaine du modèle


Le domaine du contrôleur est pas la même que celle des modèles. Il est parfaitement bien de mettre à jour plusieurs modèles en changeant l'état d'une ressource.

Dans votre cas, cela signifie faire un PUT ou POST soit l'événement ou l'enquête qui contient une liste des ids pour l'autre. Le modèle pour une mettra à jour l'association.

PUT ou POST

Certaines personnes (mais pas Roy Fielding ) croient que vous devez utiliser une mise à jour de la ressource et fournir tous l'état nouveau, d'autres estiment qu'un POST avec l'état partiel (ala PATCH) suffit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top