我有一个这样的 ActiveRecord 模型:
class Person < ActiveRecord::Base
attr_accessible :name
end
并且需要获取 HashMap Person
的 id
到他们的 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/