2010-11-09 45 views
4

該數組轉換爲逗號分隔的字符串就是一個例子如何使用Ruby

(Category.find(:all,:select => "name").collect {|c| c.name}).join(', ') 

它產生:

"Category1, Category2" 

有另一種更高效+清潔的方式做到這一點?

回答

10

問題是你試圖加入對象的屬性而不是對象本身。收集是我知道這樣做的最好方式。但我會用to_sentence方法Rails提供轉換陣列就像這樣:

Category.find(:all,:select => "name").collect { |c| c.name }.to_sentence 
+5

'Category.all(:選擇=>:名稱).MAP(:名稱).to_sentence' – 2010-11-09 15:43:24

+0

更妙的是,拉斯! – jxpx777 2010-11-09 15:49:32

+0

謝謝你們,這是完美的。 – csanz 2010-11-09 16:00:22

3

不,你的解決方案似乎完全OK。

您只能在join之前省略括號。

+0

我對Rails完全陌生,所以請認真對待這個觀點,但我認爲join和to_sentence之間的選擇取決於用例:後者似乎更適合於人類可使用的顯示器,可能會出現在說)一個實際的句子。默認的to_sentence行爲(至少這是我觀察到的)是使用逗號,除了最後一個分隔符,它使用單詞'和'。對於我的用例,我提供了一個需要逗號的腳本,而不是'和'。所以加入','效果很好。 – 2012-02-08 18:40:21

0

Array.pluck將把它放在你的字符串數組中。當你不需要它們時,它不會產生Ruby ActiveRecord對象。

Category.pluck(:name).join(", ") 
Category.pluck(:name).to_sentence