如何通过sql结果创建Hash。哈希的关键是结果查询和值是结果。
示例:
UsersPost.select('DISTINCT vk_group_id, MAX(date_send) as md')
.where('vk_group_id = :vk_group_id ',{:vk_group_id=>39338677}).map do |result|
{result.vk_group_id: result.md}
end
#=>{'223' => 'dsf'}
但它给了我错误:
语法错误,意外'}',期待keyword_end
答案 0 :(得分:2)
您的ruby版本可能在1.9.3之前。并且它不接受{key: 'value'}
之类的新哈希表单并且期待{:key => 'value'}
尝试以下
UsersPost.select('DISTINCT vk_group_id, MAX(date_send) as md')
.where('vk_group_id = :vk_group_id ',{:vk_group_id=>39338677}).map do |result|
{result.vk_group_id => result.md}
end
答案 1 :(得分:1)
您应该使用each_with_object
来填充哈希
h = UsersPost.select('DISTINCT vk_group_id, MAX(date_send) as md')
.where('vk_group_id = :vk_group_id ',{:vk_group_id=>39338677})
.each_with_object({}) { |result, hash| hash[result.vk_group_id] = result.md }
答案 2 :(得分:1)
基本上你需要使用哈希火箭语法:
UsersPost.select('DISTINCT vk_group_id, MAX(date_send) as md')
.where('vk_group_id = :vk_group_id ',{:vk_group_id=>39338677}).map do |result|
{result.vk_group_id => result.md}
end
但这会给你一系列哈希。尝试使用注入。
UsersPost.select('DISTINCT vk_group_id, MAX(date_send) as md')
.where('vk_group_id = :vk_group_id ',{:vk_group_id=>39338677}).inject({}) do |hash, user_post|
hash[user_post.vk_group_id] = user_post.md
end
each_with_object也可以,但这是一个RoR方法而不是ruby。如果有红宝石,我更喜欢使用红宝石。