2

これを宣言するより良い方法はありますか?

if current_user.received_replies.unread.count > 0

私がやろうとしているのは、少なくとも 1 つのunreadオブジェクトがある場合にのみ条件を一致させることです。

4

3 に答える 3

4
unless current_user.received_replies.unread.empty?
  # ...
end

または、あなたifが持っている場合はelse、ケースを切り替えます(unless/else地獄のように醜いため):

if current_user.received_replies.unread.empty?
  # ...
else
  # ...
end
于 2012-04-26T23:08:49.483 に答える
3

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
于 2012-04-26T23:17:21.207 に答える
1

これは少し良いかもしれません:

unless current_user.received_replies.unread.empty?
于 2012-04-26T23:08:54.703 に答える