0

如何通过 sql 结果创建 Hash。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'}

但它给了我错误:

语法错误,意外的 '}',需要关键字 end

4

3 回答 3

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
于 2013-07-08T13:56:58.740 回答
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 }
于 2013-07-08T13:47:45.740 回答
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​​。如果可用,我更喜欢使用 ruby​​。

于 2013-07-08T14:00:42.090 回答