Оценить, имеет ли массив какие-либо предметы в рубине
Есть ли лучший способ объявить это?
if current_user.received_replies.unread.count > 0
То, что я пытаюсь сделать, - это условие соответствия, только если есть хотя бы один объект unread.
Ответ 1
unless current_user.received_replies.unread.empty?
# ...
end
Или, если ваш if имеет else, переключите случаи (потому что unless/else является бешеной чертой):
if current_user.received_replies.unread.empty?
# ...
else
# ...
end
Ответ 2
Я бы использовал:
if current_user.received_replies.unread.any?
Из документов:
= Array.any?
(from ruby core)
=== Implementation from Enumerable
------------------------------------------------------------------------------
enum.any? [{|obj| block } ] -> true or false
------------------------------------------------------------------------------
Passes each element of the collection to the given block. The method returns
true if the block ever returns a value other than false or nil. If the block
is not given, Ruby adds an implicit block of {|obj| obj} (that is any? will
return true if at least one of the collection members is not false or nil.
%w{ant bear cat}.any? {|word| word.length >= 3} #=> true
%w{ant bear cat}.any? {|word| word.length >= 4} #=> true
[ nil, true, 99 ].any? #=> true