2009-06-15 4 views
0

Derzeit verwende ich dies zum Ausstreichen von Leerräumen.möchten Sie aufräumen und ändern Unicode-Formularfelder bei der Verwendung von Schienen Modell in einem trockeneren Weg

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 

Ich möchte etwas ähnliches tun, von MS Word Art von Unicode loszuwerden. Zur Zeit benutze ich:

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 

Diese Methode funktioniert, aber nicht sehr trocken, da ich es für 40 einige Formularfelder tun müssen.

hatte ich dachte, dass ich so etwas wie verwenden:

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 


ich weiß ich bin nicht zu verstehen, etwas mit der Art und Weise dies funktioniert.
wenn ich

self.attributes [u] =
mit
ersetzen setzt some_variable =

ich die richtige Ausgabe an die Konsole zu bekommen. Ich weiß einfach nicht, wie ich diese Variable zurück zum Formular bringen kann.

Wenn es hilft, der Code, der falsch ist, ist self.attributes [u] = Ich weiß nicht, was ich ersetzen soll. Ich hätte gedacht, ich könnte self.VariableNameOfField = verwenden, aber Schienen erkennt nicht die Variable, die direkt so verwendet wird.

Antwort

1

Ok, also mit etwas Hilfe von:
John Topley und Jakob S
(sorry als neuem Benutzer kann nicht nur einen Hyperlink hat und somit nicht auf ihre Stapel-Überlauf Profile verknüpfen kann)

Und fragt eine einfachere stack-overflow question

ich in der Lage gewesen, mit dem folgenden Code zu kommen, das funktioniert.
Der Trick änderte sich.

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

zu

self.send ("# {u} =", Iconv.iconv ('ASCII- // // translit ignorieren', 'UTF-8', Attribute [u]) .to_s)

Die Arbeits-Code


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