2013-07-08 3 views
0

Как создать хэш через результат sql. Ключ хеша - это результат запроса и значения, это результат.Sql result to your 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'} 

Но это дает мне ошибку:

syntax error, unexpected '}', expecting keyword_end

+0

Если вы получаете результат '# => {'223' => 'dsf'}', это просто означает, что с указанным выше кодом нет проблем, и вы получаете ошибку где-то еще – Salil

ответ

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.9.3. и он не принимает новую форму хэш как {key: 'value'} и ожидая {:key => 'value'}

Try следующий

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 
+0

Просто пишите тот же ответ, но вы отправили его первым :) –

+0

Это решение возвращает массив хэшей, но я думаю, что OP искал один хэш со всеми результатами. – Baldrick

+0

@Baldrick: - Может быть, но я просто ответил на его проблему «синтаксическая ошибка, неожиданная»}, ожидающая ключевого слова_ – Salil

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 

каждый_with_object работает также, но это метод RoR не рубиновый. Я предпочитаю использовать рубин, если он доступен.