2012-02-29 74 views
0

我試圖對象的數組內解決特定領域:如何使用Array.each修改對象數組內對象的內容(字符串)?

@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

嗯,我還一直沒能解決這個問題,但它似乎是迴避的事實,結果對象是從rMeetup Gem中拉出來的,似乎我無法修改這些對象。我檢查了它們是否通過凍結是不可變的?但是這返回false,所以我不明白爲什麼我不能修改這個對象的字段。我直接在視圖中處理utf8問題並直接顯示「clean_name」來解決這個問題,所以我不需要存儲它。 – 2012-03-01 18:30:42

回答

0

如果你正在使用的ActiveRecord不要忘記保存記錄更新屬性

result.name = clean_name 
result.save 

後或使用該隱含節約

result.update_attribute(:name, clean_name) 

鐵道部方便update_attribute功能,但要記住那麼跳過驗證。

+0

所以在這種情況下,我沒有使用ActiveRecord或存儲到任何數據庫。它只是一個臨時的對象數組。 – 2012-03-01 00:37:03

+0

然後我誤解了。看到我的其他建議。 – iltempo 2012-03-01 00:42:14

0

使用的地圖,並在塊的最後返回單個結果的要素

@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

嗯,是的地圖會在這裏效果更好,謝謝!但問題是,它甚至似乎沒有更新本地結果對象(即,if循環應該永遠不會執行,但它確實),所以我最終得到相同的原始結果。 – 2012-03-01 01:23:43