Vous devenez fou ici. N'importe quel pointeur reçu avec reconnaissance!Variable de modèle de Rails changeant de façon inattendue
J'ai un modèle de livraison et j'essaye d'ajouter une méthode pour mettre à jour l'état de livraison, basé sur des lignes de livraison. Cette fonction est définie dans la classe modèle et delivery_state est l'un des modèles les attributs:
def updateDeliveryState
expectedLines = DeliveryLine.where(:delivery_id => id,
:line_state => 'EXPECTED')
logger.debug "State1: #{delivery_state}"
if expectedLines.length == 0
if delivery_state == 'EXPECTED' || delivery_state == 'RECEIVING'
delivery_state = 'RECEIVED' # commenting this line fixes it
save
end
else
logger.debug "State2: #{delivery_state}"
if delivery_state == 'EXPECTED'
logger.debug "Updating to receiving"
delivery_state = 'RECEIVING'
save
end
end
end
Ce que je vois dans le journal est que entre les 2 logger.debug
lignes, la delivery_state a été dégagé:
State1: EXPECTED
DeliveryLine Load (4.5ms) SELECT "delivery_lines".* FROM "delivery_lines"
WHERE "delivery_lines"."line_state" = 'EXPECTED'
AND "delivery_lines"."delivery_id" = 227
State2:
Si je commente la ligne marquée dans le code ci-dessus, il semble fonctionner OK:
State1: EXPECTED
DeliveryLine Load (9.6ms) SELECT "delivery_lines".* FROM "delivery_lines"
WHERE "delivery_lines"."line_state" = 'EXPECTED'
AND "delivery_lines"."delivery_id" = 227
State2: EXPECTED
Updating to receiving
Cependant, je peux voir après avoir rafraîchi que la livraison est sti Attendez-vous après cela ??
Pouvez-vous essayer 'self.delivery_state = « RECEIVED'' l'intérieur du premier 'if' à Assurez-vous que vous ne créez pas de variable locale et appelez le setter à la place? –