#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
запуск команды
Company.first.employees.pluck(:roles)
выдает результат
[{"admin"=>false, "editor"=>false, "viewer"=>false}, {"admin"=>true}]
Как вы видите, это массив хэшей.
Как я могу проверить, содержит ли какая-либо из пар ключ-значение "admin"=>true
?
Я бы предположил, что это работает примерно так (не работает)
Company.first.employees.pluck(:roles).values.include?("admin"=>true)
Желаемый результат получается, true/false
если есть какие-либо ключевые значения с "admin"=>true
.
Ответ №1:
Это должно сработать:
Company.first.employees.pluck(:roles).any? { |roles| roles["admin"] }
В основном: для каждого элемента в Company.first.employees.pluck(:roles)
проверьте, возвращает ли какой-либо из них true
для roles["admin"]
. Если они это сделают, вернется вся any?
проверка true
.
https://ruby-doc.org/core-2.7.1/Enumerable.html#method-i-any-3F
Комментарии:
1. Нет проблем!
Enumerable
Модуль отличный 🙂
Ответ №2:
arr = [
{ "admin"=>false, "editor"=>false, "viewer"=>false },
{ "admin"=>true, "editor"=>false }
]
arr
Содержит ли какой-либо элемент пару ключ-значение ["admin", true]
?
arr.any? { |h| h["admin"] == true }
#=> true
См. Перечислимый#any?.
Возвращает массив элементов arr
, содержащих пару ключ-значение ["editor", false]
arr.select { |h| h["admin"] == true }
#=> [{"admin"=>true, "editor"=>false}]
Смотрите Array#select.
Подсчитайте количество элементов arr
, которые содержат пару ключ-значение ["editor", false]
arr.count { |h| h["editor"] == false }
#=> 2
Смотрите Array#count.
Подсчитайте количество элементов, arr
которые содержат пары ключ-значение ["editor", false]
и ["viewer", false]
arr.count { |h| h["editor"] == false amp;amp; h["viewer"] == false }
#=> 1
Возвращает массив элементов arr
, содержащих ключ "admin"
arr.select { |h| h.key?("admin") }
#=> [{"admin"=>false, "editor"=>false, "viewer"=>false},
# {"admin"=>true, "editor"=>false}]
Видите хэш #ключ? (он же has_key?
)
Возвращает массив элемента arr
, который содержит значение true
arr.select { |h| h.value?(true) }
#=> [{"admin"=>true, "editor"=>false}]
См. Хэш #значение? (он же has_value?
)
Комментарии:
1. Вау, Кэри, это отличный ответ. Спасибо. Я обязательно вернусь к этому в будущем.