ruby-on-rails - 从 ActiveRecord 对象中提取两个属性的快捷方式?

标签 ruby-on-rails ruby ruby-on-rails-3

是否有更短的方法来执行以下操作(

@user.employees.map { |e| { id: e.id, name: e.name } }
# => [{ id: 1, name: 'Pete' }, { id: 2, name: 'Fred' }]

用户 has_many 员工。这两个类都继承自 ActiveRecord::Base

上面有两点我不喜欢

  1. 它在映射之前将员工加载到内存中,
  2. 它很冗长(我猜是主观的)。

有没有更好的办法?

最佳答案

更新:

查看@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/

相关文章:

ruby-on-rails - 在 Rails 中向请求添加 header

ruby-on-rails - Ruby/Rails - 检查 HABTM 关系记录中是否存在子 ID

ruby-on-rails - rails : test single file with rake test without resetting database

mysql - 如何在 ruby​​ dbi 中的 3307 端口连接到 MySQL

ruby-on-rails - 什么是 "/path/to"?

ruby-on-rails - Rails 3.2 - #<Array :. 的未定义方法 `where' .. - Model.where() 的查询

ruby-on-rails - 为什么 Rails 查询缓存不起作用?

ruby-on-rails - 在 Rails 测试中跟踪弃用警告的来源

mysql - 了解 Rails 中与 ActiveRecord 的关系

ruby-on-rails - 图片标签显示模型的所有列