Is there a better way to declare this?
if current_user.received_replies.unread.count > 0 What I'm trying to do is match condition only if there's at least one unread object.
I'd use:
if current_user.received_replies.unread.any? From the docs:
= 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 ActiveRecord it might be viable, but I've seen a lot confusion about this where people thought it was just the negation of empty?, which is not true in general.[false].any? is false.[1,2,3].any? { |x| x > 2 }. It's kind of unfortunate that it also works without a block (I don't see where it would be useful).any? works without a block.