ruby-on-rails - 如何在 Rails 3.x 中提取多个属性?

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

我有一个这样的 ActiveRecord 模型:

class Person < ActiveRecord::Base
  attr_accessible :name
end

并且需要获取 HashMap Personid 到他们的 name:

{1 => "Paul", 2 => "Aliyah", 3 => ... }

现在,显而易见的方法是

Person.all.collect { |p| [p.id, p.name] }.to_h

但是,我不需要实例化每个 Person,我只需要哈希。在 Rails 4 中,我可以使用 .pluck(:id, :name) 而不是 collect,但是在 3.x 中,pluck 只需要一个争论。但是我发现这个解决方法可以在不加载模型的情况下获得我想要的东西:

Person.all.group(:id).minimum(:name)

问题:我会在 hell 中燃烧吗?此外,是否有更优雅的方法来执行此操作,这种 hacky 方法是否有我可能不知道的缺点?谢谢!

最佳答案

下面是对这种情况和处理它的各种策略的很好的描述:Plucking Multiple Columns in Rails 3

我更喜欢制作并包含一个模块的建议解决方案:

# multi_pluck.rb
require 'active_support/concern'

module MultiPluck
  extend ActiveSupport::Concern

  included do
    def self.pluck_all(relation, *args)
      connection.select_all(relation.select(args))
    end
  end
end

关于ruby-on-rails - 如何在 Rails 3.x 中提取多个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696229/

相关文章:

ruby - 在 Ruby 中概念化枚举器和惰性枚举器

ruby-on-rails - Foreman 启动和隐藏 web 进程输出

ruby-on-rails - Rails回形针:更新vs. update_attributes

ruby-on-rails - 通过 get in rails 传递参数数组

ruby-on-rails - Json 到 csv。如何转换?

javascript - 如何调用 .js.erb 文件而不是 .rjs 文件

Ruby Capybara Element not found 错误处理

ruby-on-rails - 使用 Nokogiri 读取格式错误的 XML : Unescaped Ampersands in URL field

ruby-on-rails-3 - 在客户端使用 Rails 本地化 I18n

ruby-on-rails - rails : Using CanCan to assign multiple roles to Users for each organization they belong to?