2009-06-15 9 views
0

Actuellement, je l'utilise pour supprimer les espaces.Vous souhaitez nettoyer et modifier les champs de formulaire Unicode en utilisant un modèle de rails de manière plus sèche

class Newsletter < ActiveRecord::Base 
    before_validation :clean_up_whitespace 
end 


def clean_up_whitespace 

fields_to_strip = ['title','notes'] 
fields_to_strip.each { |f| 
    unless self.attributes[f].nil? 
     self.attributes[f].strip! 
    end 
} 
end 

Je veux faire quelque chose de similaire pour se débarrasser de type MS mot de unicode. Actuellement, j'utiliser:

require 'iconv' 

class Newsletter < ActiveRecord::Base 
    before_validation :clean_up_unicode 
end 

def clean_up_unicode 

unless title.blank? 
    self.title = Iconv.iconv('ascii//ignore//translit', 'utf-8', self.title).to_s 
    end 

    unless notes.blank? 
    self.notes = Iconv.iconv('ascii//ignore//translit', 'utf-8', self.notes).to_s 
    end 
end 

Cette méthode fonctionne mais n'est pas très sec car je dois le faire pour 40 des champs de formulaire.

Je pensais que je pouvais utiliser quelque chose comme:

require 'iconv' 

class Newsletter < ActiveRecord::Base 
    before_validation :clean_up_unicode 
end 

def clean_up_unicode 

unicode_fields_to_clean = ['title','notes'] 
    unicode_fields_to_clean.each { |u| 
    unless self.attributes[u].blank? 
     self.attributes[u] = Iconv.iconv('ascii//ignore//translit', 'utf-8', attributes[u]).to_s 
    end 
} 
end 


Je sais que je ne comprends pas quelque chose avec la façon dont cela fonctionne.
quand je remplacerai

self.attributes [u] =
avec
met une_variable =

Je reçois la sortie correcte à la console. Je ne sais tout simplement pas comment rétablir cette variable dans le formulaire.

Si cela aide le code qui est faux est self.attributes [u] = Je ne sais pas quoi remplacer avec. J'aurais pensé que je pourrais utiliser self.VariableNameOfField = mais les rails ne reconnaissent pas la variable utilisée directement comme ça.

Répondre

1

Ok, donc avec l'aide de:
John Topley et Jakob S
(désolé en tant que nouvel utilisateur peut non seulement avoir 1 lien hypertexte et ne peut donc pas créer un lien vers leur profil pile débordement)

Et poser une simple stack-overflow question

Je suis en mesure de trouver le code suivant qui fonctionne.
L'astuce changeait.

self.attributes[u] = Iconv.iconv('ascii//ignore//translit', 'utf-8', attributes[u]).to_s 

à

self.send ("# {u} =", Iconv.iconv ('ascii // ignorer // translit', 'utf-8', les attributs [u]) .to_s)

Le code de travail


require 'iconv' 

class Newsletter < ActiveRecord::Base 
    before_validation :clean_up_unicode 
end 

def clean_up_unicode 

unicode_fields_to_clean = ['title','notes'] 
    unicode_fields_to_clean.each { |u| 
    unless self.attributes[u].blank? 
     self.send("#{u}=", Iconv.iconv('ascii//ignore//translit', 'utf-8', attributes[u]).to_s) 
    end 
} 
end