我有一個模型,我喜歡我可以使用的採摘方法。如果我這樣做:漂亮的陣列從採摘
@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