Как изменить содержимое (строку) объекта в массиве объектов, используя Array.each? - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь исправить определенные поля в массиве объектов:

@results.each do |result|
  ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
  clean_name = ic.iconv(result.name + ' ')[0..-2]
  result.name = clean_name
  if clean_name != result.name 
    puts "Name:    #{result.name} \ncleaned: #{clean_name}"
  end

end

И вывод сервера:

Name:    Free Pretzel Day @ Auntie Anne?s 
cleaned: Free Pretzel Day @ Auntie Annes

Это происходит из-за ошибки "неверная последовательность байтовв UTF-8 ", поэтому я нашел код iconv, чтобы это исправить.В этом случае у меня есть массив объектов, и я пытаюсь очистить поле result.name.Но когда я перебираю его и сохраняю "result.name = clean_name", на самом деле кажется, что поле объекта result.name.

не изменяется.

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Использовать карту и возвращать отдельные элементы результата в конце блока

@results.map do |result|
  ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
  clean_name = ic.iconv(result.name + ' ')[0..-2]
  result.name = clean_name
  if clean_name != result.name 
    puts "Name:    #{result.name} \ncleaned: #{clean_name}"
  end
  result
end
0 голосов
/ 01 марта 2012

Если вы используете ActiveRecord, не забудьте сохранить запись после обновления атрибута

result.name = clean_name
result.save

или использовать более удобную функцию update_attribute, которая неявно сохраняет

result.update_attribute(:name, clean_name)

помните, что проверки тогда пропускаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...