当我使用users = User.where(...)时 我可以使用users.find(id)来查找它的id
我想使用哈希,以便我可以使用users [id]作为搜索方式,其中id成为哈希的索引。
我该怎么做?
我试过了:
div {
display: inline-block;
}
这些都没有将主键转换为索引
答案 0 :(得分:3)
要将任何Enumerable
转换为哈希,您可以使用ActiveSupport (activesupport/lib/active_support/core_ext/enumerable.rb)
中的index_by
users = User.where(...)
users.index_by(&:id)
# => { 1 => <User ...>, 2 => <User ...>, ...}
# note the difference between 'index_by' and 'group_by' where the latter will return an array of a single User for each id
users.group_by(&:id)
# => { 1 => [<User ...>], 2 => [<User ...>], ...}
由于ActiveRecord::Relation
在其祖先链中包含Enumerable
模块(您可以通过ActiveRecord::Relation.ancestors.include? Enumerable
进行检查),您可以在任何Enumerable
上使用任何ActiveRecord::Relation
实例方法对象。
答案 1 :(得分:2)
针对您的特定需求的解决方案
indexed_users = [] # holds users on index as id
users.each {|u| indexed_users[u.id] = u.attributes }
同样将id转换为索引并不是一个好主意,因为如果id变得大了大约数千左右并且id不是顺序的,则数组大小可能会失控。喜欢
users = [<id: 1>, <id:200>]
将生成大小为201的数组。
更新以获取哈希是关键
users.map(&:attributes).group_by { |attr| attr[:id] }