假设我有一个名为“Fruit”的模型,并且查询将所有不同的水果名称返回给@fruit:
!ruby / object:水果属性: fruit_name:orange attributes_cache:{}
!ruby / object:水果属性: fruit_name:apple attributes_cache:{}
!ruby / object:水果属性: fruit_name:peach attributes_cache:{}
我理解(有点)@fruit是一个由Arrays组成的数组(activerecord对象)。我正在尝试将返回的水果名称放入逗号分隔的字符串中,例如:“orange,apple,peach”。
如果数组由字符串或数字(而不是数组)组成,我知道我可以使用map w / .join(',')来执行此操作。我在引用数组中的数组所需的额外语法时遇到问题(每个数组索引处的数组的'fruit_name'字段)。
我知道这会起作用,只是不确定如何将其作为动态迭代:
@fruit_string = @fruit [0] .fruit_name +','+ @fruit [1] .fruit_name +','+ @fruit [2] .fruit_name
答案 0 :(得分:30)
@fruit_string = @fruit.map { |f| f.fruit_name }.join ','
现在,当一个块包含一个没有参数的方法调用,并且由于某些复杂的 1 原因,你可以像
那样编写它@fruit_string = @fruit.map(&:fruit_name).join ','
<小时/> 1。一元&amp; operator将procs转换为块并阻塞为procs。如果操作数都不是,那么它首先调用to_proc,如果可以的话。 (是的,符号有一个to_proc。)它比这更复杂,但这就是为什么它是地图的精美补充的原因。
答案 1 :(得分:17)
或使用proc短手:
@fruit_string = @fruit.map(&:fruit_name).join(',')