2013-10-12 4 views
2

J'ai un rappel sur mon modèle de sorte que si une valeur booléenne est définie sur true, le rappel fixerait à faux, comme ci-dessous:Définissez une valeur booléenne false

after_create :set_boolean 

def set_boolean 
    if self.status == true 
    self.name = "XYZ" 
    self.status = !self.status 
    self.save 
    end 
end 

Utilisation du rappel ci-dessus I suis capable de mettre à jour la valeur de name à XYZ mais la valeur de la variable d'état est toujours définie sur vrai. Je suppose que le rappel fonctionne bien mais incapable de comprendre où est le problème.

Des suggestions?

+2

Pourquoi ne pas utiliser 'before_create' pour que vous n'ayez pas à enregistrer votre modèle deux fois? –

+0

J'utilise after_create car j'ai besoin d'utiliser le champ 'id' pour faire une action. J'ai besoin de mettre à jour le 'status' à' false' après que l'action soit terminée. –

Répondre

-3

Je pense que vous devez envelopper l'affectation dans une parenthèse avant l'opérateur !.

self.status = !(self.status) 
+0

Non, cela ne fonctionne pas. Même j'ai essayé de régler 'self.staus = false' mais ne fonctionne toujours pas. –

+0

pouvez-vous le changer en «sauver!» Et dites-moi si cela soulève une erreur? Étant donné que vous utilisez le '! (Self.status)' – PericlesTheo

1

après avoir créé, vous pouvez spécifier une fonction model qui va définir la valeur d'attribut à false comme ci-dessous

Dans le modèle

after_create :set_status 

def set_status 
    self.status = false 
end 
Questions connexes