Restfully zerstören polymorphe Vereinigung in Rails?
-
19-09-2019 - |
Frage
Wie zerstöre ich den Verein selbst und lassen Sie die Objekte allein zugeordnet ist, während diese RESTful halten?
Insbesondere, ich habe diese Modelle:
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
Das sagt, dass das Ereignis :surveyable
(ModelSurvey belongs_to Event
) ist. Meine Frage ist, ohne dass ein ModelSurveysController
erstellen zu müssen, wie kann ich die ModelSurvey
zerstören, während die Event
und Survey
allein zu lassen?
Etwas mit map.resources :events, :has_many => :model_surveys
? Ich bin mir nicht ganz sicher, was in dieser Situation zu tun. Was muss mit den Routen passieren, und das, was in der Steuerung muss geschehen? Ich hoffe, dass die URL wie folgt aussehen könnte:
/events/:title/model_surveys/:id
Danke für Ihre Hilfe, Lance
Lösung
In Rails 2.3 Sie accepts_nested_attributes_for
haben, die Sie eine Reihe von ModelSurveys auf das betreffende Ereignis passieren lassen würde. Wenn Sie durch die verschachtelte Attribute Erklärung erlauben zu zerstören, werden Sie in der Lage sein event[model_surveys][1][_destroy]=1
passieren und der Verband entfernt wird. Schauen Sie sich die api docs .
Andere Tipps
Ressourcen Domain! = Modell Domain
Die Domäne der Steuerung ist nicht das gleiche wie die der Modelle. Es ist völlig in Ordnung, mehrere Modelle durch Änderung des Status einer Ressource zu aktualisieren.
In Ihrem Fall, dass Mittel einen PUT oder POST entweder mit dem Ereignis oder der Umfrage zu tun, die eine Liste der IDs für die andere enthält. Das Modell für eine den Verband aktualisieren.
PUT oder POST
Einige Leute (aber nicht Roy Fieldings ) glauben dass Sie die Ressource eine PUT zu aktualisieren und bieten wieder alle des Staates verwendet werden soll, andere glauben, dass ein POST mit dem Teilzustand (ala PATCH) ausreichend ist.