Ruby有一个find函数来查询数据库并将结果返回到数组中。
例如:
@hotels = Hotel.find(:all, :conditions => something)
有没有办法可以在Ruby哈希中得到结果,我指定特定于某些条件的前一个数组中返回的每个对象的每一行的键。
答案 0 :(得分:2)
不直接在Rails中,但您可以在结果
上使用map
示例:
Hotel.find(:all, :conditions => something).map { |h| {h.id => h.attributes} }
将返回一个哈希数组。
或者:
Hash[ Hotel.find(:all, :conditions => something).map { |h| [h.id, h.attributes] } ]
将返回由记录ID
索引的哈希答案 1 :(得分:2)
这实际上取决于你想对结果做些什么。也许index_by
可能是一种方便的方法吗?
Hotel.where(...).index_by(&:id)
# => { 1 => [<Hotel#1, Berlin>],
# 2 => [<Hotel#2, Berlin>],
# 3 => [<Hotel#3, Melbourne>] }
Hotel.where(...).index_by(&:city)
# => { 'Berlin' => [<Hotel#1, Berlin>, <Hotel#2, Berlin>],
# 'Melbourne' => [<Hotel#3, Melbourne>] }
答案 2 :(得分:0)
你也可以通过回避rails对sql结果的客观化来获得一个哈希数组的结果:
hashes = ActiveRecord::Base.connection.select_all("select * from hotels where name = \"foo\"")
请注意,结果哈希中的键都是字符串,而不是符号。
我不确定where I specify the key for each row specific to each object returned in the previous array specific to certain conditions.