Activerecord对象数组转换为逗号分隔的字符串

10
假设我有一个名为“Fruit”的模型,查询返回所有不同的水果名称到@fruit:
  • !ruby/object:Fruit attributes: fruit_name: orange attributes_cache: {}

  • !ruby/object:Fruit attributes: fruit_name: apple attributes_cache: {}

  • !ruby/object:Fruit attributes: fruit_name: peach attributes_cache: {}

我了解(在某种程度上)@fruit是由数组构成的数组(activerecord对象)。我试图将返回的水果名称转换为逗号分隔的字符串,例如:“orange,apple,peach”。
如果数组由字符串或数字组成(而不是数组),我知道可以使用map w/ .join(',')来做到这一点。 我遇到了一个问题,需要额外的语法来引用数组中的数组(每个数组索引处的数组中的“fruit_name”字段)。
我知道这样做可以工作,但不确定如何以动态迭代的方式实现:
@fruit_string = @fruit[0].fruit_name + ',' + @fruit[1].fruit_name + ',' + @fruit[2].fruit_name
2个回答

34
@fruit_string = @fruit.map { |f| f.fruit_name }.join ','

现在,当一个代码块包含了一个无参数方法调用,并且由于某些比较复杂的原因,你可以这样写:

@fruit_string = @fruit.map(&:fruit_name).join ','


1. 一元运算符 & 可以将procs转换为blocks,将blocks转换为procs。如果操作数都不是,那么它会首先调用 to_proc 方法(是的,Symbol 也有 to_proc)。这甚至比这更复杂,但这就是为什么它是 map 的一个好补充。


我会使用下面的简写版本。 - Chris Hough

17

或者使用proc的简写形式:

@fruit_string = @fruit.map(&:fruit_name).join(',')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接