Activerecord对象数组以逗号分隔的字符串

时间:2011-01-30 00:58:25

标签: ruby-on-rails

假设我有一个名为“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

2 个答案:

答案 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(',')