我正在尝试修复对象数组中的特定字段:
@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
。
答案 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