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

Ren*_*eno 10 ruby-on-rails

假设我有一个名为"Fruit"的模型,并且查询将所有不同的水果名称返回给@fruit:

  • !ruby/object:Fruit属性:fruit_name:orange attributes_cache:{}

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

  • !ruby/object:Fruit属性: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

Dig*_*oss 30

@fruit_string = @fruit.map { |f| f.fruit_name }.join ','
Run Code Online (Sandbox Code Playgroud)

现在,当一个块由不带任何参数,并且有点复杂的方法调用的1倍的原因,你可以把它写像

@fruit_string = @fruit.map(&:fruit_name).join ','
Run Code Online (Sandbox Code Playgroud)


1.一元&运算符将procs变成块并阻塞到procs中.如果操作数都不是,那么它首先调用to_proc,如果可以的话.(是的,符号有一个to_proc.)它比这更复杂,但这就是为什么它是地图的精美补充的原因.


Tob*_*ede 17

或者使用proc简写:

@fruit_string = @fruit.map(&:fruit_name).join(',')
Run Code Online (Sandbox Code Playgroud)