是否有更短的方法来执行以下操作(
@user.employees.map { |e| { id: e.id, name: e.name } }
# => [{ id: 1, name: 'Pete' }, { id: 2, name: 'Fred' }]
用户
has_many
员工。这两个类都继承自 ActiveRecord::Base
。
上面有两点我不喜欢
- 它在映射之前将员工加载到内存中,
- 它很冗长(我猜是主观的)。
有没有更好的办法?
最佳答案
更新:
查看@jamesharker 的解决方案:从 ActiveRecord >= 4,pluck
接受多个参数:
@user.employees.pluck(:id, :name)
上一个答案:
对于 rails >= 3.2 中的单列,你可以这样做:
@user.employees.pluck(:name)
...但是由于您必须提取两个属性,您可以这样做:
@user.employees.select([:id, :name]).map {|e| {id: e.id, name: e.name} }
# or map &:attributes, maybe
如果你真的需要底层操作,看看source of #pluck , 使用 select_all
关于ruby-on-rails - 从 ActiveRecord 对象中提取两个属性的快捷方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777086/