3 votes

Comment mettre à jour un autre modèle en utilisant un Callback ?

Je travaille avec un modèle appelé Recover. Avant de créer le modèle, je voudrais enregistrer l'attribut booléen Combo.occupied = true en utilisant l'attribut Recover.combo_id comme référence.

Il semble que mon SQL exécute correctement la requête, mais qu'il ne sauvegarde pas cet attribut. Comment puis-je enregistrer Combo.occupied = true ?

récupérer.rb :

before_create :checkin

protégé

def checkin x = Combo.find_by_id(combo_id).occupied = vrai
fin

Rails Console :

Démarrage du POST "/recovers" pour 127.0.0.1 à 2011-01-06 17:07:24 -0800
Traitement par RecoversController#create en HTML
Paramètres : {"utf8"=>"", "authenticity_token"=>"o1Iu3Y9/rVBOZPoDUgVP/tRfQ8GxbdWC40DbPq9YxUE=", "recover"=>{"combo_id"=>"4", "email"=>"jz@marin.edu"}, "commit"=>"Créer une récupération"} Récupérer Chargement (0.2ms) SELECT "recovers". "id" FROM "recouvrements" WHERE ("recouvrements". "email" = 'justin.zollars@marin.edu') LIMITE 1
Récupérer la charge (0.1ms) SELECT "recouvrements". "id" FROM "recouvrements" WHERE ("recouvrements". "combo_id" = 4) LIMITE 1
Chargement des combos (0,5 ms) SELECT "combos".* FROM "combos" WHERE ("combos". "id" = 4) LIMIT 1 AREL (0.5ms) INSERT INTO "recovers" ("locker_number", "email", "demandes", "created_at", "updated_at", "combo_id") VALUES (NULL, 'justin.zollars@marin.edu', NULL, '2011-01-07 01:07:24.287072', '2011-01-07 01:07:24.287072', 4) Redirigé vers http://localhost:3000/recovers/14 Complété 302 Found en 119ms

RecoversController#create

def create @recover = Recover.new(params[:recover])

respond_to do |format|
  if @recover.save
    format.html { redirect_to(@recover, :notice =>
'La récupération a été créée avec succès.') } format.xml { render :xml => @recover, :status => :created,

location => @recover }

else format.html { render :action => "new" } format.xml { render :xml => @recover.errors, :status =>

unprocessable_entity } fin

end

fin

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X