хотите очистить и изменить поля формы Unicode при использовании модели рельсов более сухим способом - PullRequest
0 голосов
/ 16 июня 2009

В настоящее время я использую это для удаления пробелов.

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 не распознает используемую переменную напрямую, вот так.

1 Ответ

1 голос
/ 16 июня 2009

Хорошо, поэтому с некоторой помощью:
Джон Топли и Якоб С
(извините, поскольку новый пользователь не может иметь только 1 гиперссылку и, следовательно, не может ссылаться на свои профили переполнения стека)

И задание более простого вопроса о переполнении стека

Мне удалось найти следующий код, который работает.
Трюк менялся.

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

до

self.send ("# {u} =", Iconv.iconv ('ascii // игнорировать // translit', 'utf-8', атрибуты [u]). to_s)

Рабочий код


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
...