2010-11-09 24 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