2012-05-16 80 views
2

我正在使用Mongoid並檢索一堆BSON::ObjectId實例。理想情況下,我想在檢索時將它們轉換爲字符串。什麼是正確的語法?它可以在兩線這樣進行:如何將地圖與to_s結合?

foo = Bar.where(:some_id => N).map(&:another_id) 
ids_as_strings = foo.map(&:to_s) 

什麼是正確的Ruby的方式來鏈to_s地圖調用上述後?

回答

8

這工作得很好,但不要做吧!

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s) 

看起來確實很酷,但考慮一下,你正在做兩張地圖。映射用於循環數組或其他內容,並且將在每個位置操作,檢索新數組或其他內容,並顯示結果。

那麼爲什麼要做兩個循環,如果你想做兩個操作?

ids_as_string = Bar.where(:some_id => N).map {|v| v.another_id.to_s} 

這應該是在這種情況下走的路,實際上看起來更好。

+1

我認爲「不這樣做」的建議可能太強大了,但是指出影響和選擇是很好的。 – Phrogz

+0

我認爲「不這樣做」太強大了,重要的是開發人員必須明白解決方案的工作原理,在實踐中爭取最佳性能非常重要。 –

1

您只需IT連鎖直接:

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s) 

我與模型嘗試了這一點,我得到了你所期望的,是這樣的:

["1", "2", ...]