Domanda

Come faccio a distruggere l'associazione stessa e lasciare gli oggetti di essere associati da soli, pur mantenendo questa RESTful?

In particolare, ho questi modelli:

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

Che sta dicendo che l'evento è :surveyable (ModelSurvey belongs_to Event). La mia domanda è, senza dover creare un ModelSurveysController, come faccio a distruggere il ModelSurvey, lasciando la Event e Survey solo?

Qualcosa con map.resources :events, :has_many => :model_surveys? Io non sono del tutto sicuri di cosa fare in questa situazione. Che cosa deve accadere con i percorsi, e che cosa deve accadere nel controllore? Spero che l'URL potrebbe essere simile a questa:

/events/:title/model_surveys/:id

Grazie per il vostro aiuto, Lance

È stato utile?

Soluzione

In Rails 2.3 avete accepts_nested_attributes_for che lasceranno passare una serie di ModelSurveys per l'evento in questione. Se si consente di distruggere attraverso la dichiarazione di attributi nidificati, sarete in grado di passare event[model_surveys][1][_destroy]=1 e l'associazione verrà rimosso. Controlla la Documentazione API .

Altri suggerimenti

dominio Risorse! = Dominio modello


Il dominio del controller non è la stessa di quella dei modelli. E 'perfettamente bene per aggiornare più modelli cambiando lo stato di una risorsa.

Nel tuo caso, che significa fare una PUT o POST sia alla corsa o l'indagine, che contiene un elenco di ID per l'altro. Il modello per una aggiornerà sezione.

PUT o POST

Alcune persone (ma non Roy Fielding ) credono che si dovrebbe usare un PUT per aggiornare la risorsa e di fornire tutto lo stato di nuovo, altri ritengono che un post con lo stato parziale (PATCH ala) è sufficiente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top