2010-03-20 4 views
0

J'essaye d'écrire une fonction simple pour nettoyer une chaîne de nom de fichier et mettre à jour l'objet. Lorsque je sauvegarde une chaîne de test, cela fonctionne, mais lorsque j'essaie d'enregistrer la variable de chaîne que j'ai créée, rien ne se passe. Mais quand je retourne la chaîne, la sortie semble être correcte! Qu'est-ce que je rate?Rails: enregistrement d'une chaîne sur un objet - problème de syntaxe?

def clean_filename  
    clean_name = filename 
    clean_name.gsub! /^.*(\\|\/)/, '' 
    clean_name.gsub! /[^A-Za-z0-9\.\-]/, '_' 
    clean_name.gsub!(/\_+/, ' ') 
    #update_attribute(:filename, "test") #<-- correctly sets filename to test 
    #update_attribute(:filename, clean_name) #<-- no effect????? WTF 
    #return clean_name <-- seems to returns the correct string 
end 

Merci beaucoup.

+0

Où la fonction clean_filename est-elle appelée? – Laz

+0

Je l'appelle depuis la console pour tester; il est attaché à un objet document. par exemple Document.find (1) .clean_filename – pendevere

+0

Ne pas avoir une installation de rails sur ce système, donc ne peut pas tester, essayez write_attribute. – Laz

Répondre

-1

La mise à jour ne passe-t-elle que si l'ID de l'objet a changé? Je pense qu'il est raisonnable de mettre à jour l'emplacement seulement quand l'objet lui-même a changé.

Avez-vous déjà essayé d'utiliser gsub au lieu de gsub !, de sorte que l'ID de l'objet change?