我有一个模型,我喜欢我可以使用的采摘方法。如果我这样做:漂亮的阵列从采摘
@x = AwesomeModel.all.pluck(:column_one, :column_two)
然后我得到一个多维数组:@x [] []。随着我伤心的技能,我和他们使用的数字工作:
@x[0][1]
我如何可以用拔毛或类似的方法来访问数组是这样的:
@x[0][:column_two]
我有一个模型,我喜欢我可以使用的采摘方法。如果我这样做:漂亮的阵列从采摘
@x = AwesomeModel.all.pluck(:column_one, :column_two)
然后我得到一个多维数组:@x [] []。随着我伤心的技能,我和他们使用的数字工作:
@x[0][1]
我如何可以用拔毛或类似的方法来访问数组是这样的:
@x[0][:column_two]
如果您担心你从数据库得到的是什么结构,你应该简单地做:
@x = AwesomeModel.all.select(:column_one, :column_two)
然后你会保持快速DB查询优势+具有AwesomeModel
的情况下,但只有column_one
和column_two
充满
或者,如果你想要做手工:
@x = AwesomeModel.all.pluck(:column_one, :column_two).map do |array|
OpenStruct.new({column_one: array[0], column_two: array[1] }) }
end
然后你可以使用它像一个普通的模型:
@x[0].column_one
# or even
@x[0][:column_two]
真棒,谢谢! – MiningSam 2014-09-10 16:49:45
你可以做
class ActiveRecord::Base
def self.pluck_hash(*args)
plucked = pluck(*args)
plucked.map {|ary| Hash[args.zip ary]}
end
end
AwesomeModel.all.pluck_hash(:column_one, :column_two)
#=> [{:column_one => 'value', :column_two => 'value}, {...}, ... ]
冷杉所有的,不要使用.all.pluck
,因为它返回一个值的数组,并且这会让你失去ActiveRecord::Relation
的所有优点。
而是使用AwsomeModel.method
直接,它会创建查询,但不运行它,直到你需要它,AwsomeModel.select(:column_1, :column_2)
将创建一个
select (awesome_models.column_1, awsome_models.column_2)
查询,其结果将是ActiveRecord::Relation
对象,这仍是一个数组可链接,和值仍在列名例如键:
AwsomeModel.select(:column_1, :column_2).first.column_1
而不是
AwesomeModel.all.pluck(:column_1, :column_2).first[0] # or .first.first
什么版本的红宝石? '.to_h'可用于在Ruby 2.1中转换为哈希。 – pdobb 2014-09-10 13:55:32
版本2.0.0 - 太糟糕我有Rails在多个平台上运行,不能真正负担打破我的平台... – MiningSam 2014-09-10 16:47:50