如何使用Array.each修改对象数组中对象的内容(字符串)?

时间:2012-02-29 22:50:09

标签: ruby

我正在尝试修复对象数组中的特定字段:

@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 :(得分:0)

如果您使用ActiveRecord,请不要忘记在更新属性后保存记录

result.name = clean_name
result.save

或使用mor方便的update_attribute函数隐式保存

result.update_attribute(:name, clean_name)

但请记住,当时会跳过验证。

答案 1 :(得分:0)

使用map并返回块末尾的各个结果元素

@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
相关问题