2009-10-11 8 views
0

Cela n'arrive que dans la production, lorsque nous mettons à jour certains enregistrements via le navigateur, la modification n'a pas été enregistrée. cela ne semble pas être un problème de cache car nous avons vérifié que les données dans mysql étaient toujours les anciennes données. Cependant, le contrôleur a été touché et le message flash a été renvoyé comme si la modification avait été effectuée avec succès. Cependant, nous pouvons effectuer le changement manuellement dans la console rails ou dans mysql sans aucun problème.Rails update_attribute n'a pas atteint la base de données mysql

Des idées pour lesquelles cela se passe?

btw, nous avons récemment reconfigurer le site pour utiliser SSL, cela pourrait avoir quelque chose à voir avec ça.

+0

Il pourrait être utile de mentionner: la version de Rails, la version de MySQL, le code du contrôleur, tout autre code qui fonctionne sur le côté lorsqu'un modèle est sauvegardé (before_save, des observateurs, etc.). – Petros

+0

Collez le code où vous mettez à jour les enregistrements ... – khelll

+0

Peut-être que vous êtes allé attr_protected/attr_accessor 'd votre modèle. –

Répondre

2

Y a-t-il quelque chose qui aurait pu empêcher l'enregistrement du modèle?

Une façon de faire en sorte que les attributs sont définis et le modèle est enregistré est d'utiliser l'exception la version augmentation qui peut aider à résoudre des problèmes comme celui-ci:

def update 
    @model = Model.find(params[:id]) 

    @model.update_attributes(params[:model]) 

    redirect_to(model_path(@model)) 
end 

Cela pourrait être amélioré à une méthode plus fiable:

def update 
    @model = Model.find(params[:id]) 

    # Use exception-throwing update_attributes! 
    @model.update_attributes!(params[:model]) 

    redirect_to(model_path(@model)) 

rescue ActiveRecord::RecordNotFound 
    render(:partial => 'not_found') 
rescue ActiveRecord::RecordInvalid 
    # Delegate back to edit action, something's invalid 
    edit 

    render(:action => 'edit') 
end 

Il peut arriver que update_attributes ne sauvegarde pas correctement.

Si vous pouvez effectuer la même mise à jour sur les mêmes données avec les mêmes méthodes, cela est particulier.

Questions connexes