2016-06-30 4 views
-1

Есть ли отрыв для хэша?Pluck hash in rails

У меня есть хэш, как показано ниже, и я попытался сорвать следующую команду. Я знаю, что это можно сделать по-разному. Но я не знаю, есть ли способ выщипывания со следующим.

hash = {"0"=>{"user_id"=>"1"}, "0"=>{"user_id"=>"2"}} 
hash.pluck("user_id") 
+0

ли рельсы 3 или 4 рельсов? –

+0

человек, кто-то сейчас на волне понижения: P – jaydel

ответ

2

Best вы можете сделать, это просто map.

hash = {"0"=>{"user_id"=>"1"}, "1"=>{"user_id"=>"2"}} 
hash.values.map{|h| h['user_id']} # => ["1", "2"] 

Если вы хотите, вы можете даже взять это и добавить его в Array в качестве метода pluck. Конечно, «вы можете» не означает, что «вы должны» :)

-1

Pluck работает только для ActiveRecords.

Ссылка - Pluck

+4

Я вполне уверен, что он уже это знает. –

0

Это должно работать

hash.inject([]) do |acc, el| 
    acc << el.last.try(:[], 'user_id').to_i 
    acc 
end 

Вот результат

[38] pry(main)> hash.inject([]){|acc, el| acc << el.last.try(:[], 'user_id').to_i; acc} 
=> [1, 2] 

Но это будет работать только для хэша, который вы предоставили.

Или вы можете обезьяна патч Хэш-класс:

# config/initializers/hash.rb 
class Hash 
    def hash_pluck(key) 
    self.inject([]){|acc, el| acc << el.last.try(:[], key).to_i; acc} 
    end 
end 

, а затем вызвать его на хэш

[2] pry(main)> hash.hash_pluck('user_id') 
=> [1, 2] 
+0

что случилось с 'try'? –

+0

Да, я знаю, что метод рельсов не рубиновый. Так что в соответствии с тегами мы говорим о ror. – retgoat

+0

Я имел в виду, что вам это не нужно. –