В настоящее время я использую это для удаления пробелов.
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
Я хочу сделать что-то подобное для избавления от слова MS типа юникод.
В настоящее время я использую:
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
Этот метод работает, но не очень СУХО, так как мне нужно сделать это для 40 полей формы.
Я думал, что смогу использовать что-то вроде:
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
Я знаю, что не понимаю, как это работает.
когда я заменю
self.attributes [u] =
с
ставит some_variable =
Я получаю правильный вывод на консоль. Я просто не знаю, как вернуть эту переменную обратно в форму.
Если это поможет, то неправильный код будет self.attributes [u] = Я не знаю, чем его заменить. Я бы подумал, что мог бы использовать self.VariableNameOfField = , но rails не распознает используемую переменную напрямую, вот так.