【发布时间】:2012-05-07 17:32:18
【问题描述】:
有没有更好的方法来声明这个?
if current_user.received_replies.unread.count > 0
我要做的是仅当至少有一个 unread 对象时才匹配条件。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
有没有更好的方法来声明这个?
if current_user.received_replies.unread.count > 0
我要做的是仅当至少有一个 unread 对象时才匹配条件。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
unless current_user.received_replies.unread.empty?
# ...
end
或者,如果您的 if 有 else,请切换大小写(因为 unless/else 太丑了):
if current_user.received_replies.unread.empty?
# ...
else
# ...
end
【讨论】:
我会使用:
if current_user.received_replies.unread.any?
来自文档:
= Array.any? (来自红宝石核心) === 从 Enumerable 实现 -------------------------------------------------- ---------------------------- 枚举。任何? [{|对象|块 } ] -> 真或假 -------------------------------------------------- ---------------------------- 将集合的每个元素传递给给定的块。方法返回 如果块曾经返回 false 或 nil 以外的值,则返回 true。如果块 没有给出,Ruby 添加了 {|obj| 的隐式块obj} (那是什么?将 如果至少有一个集合成员不是 false 或 nil,则返回 true。 %w{蚂蚁熊猫}.any? {|字| word.length >= 3} #=> 真 %w{蚂蚁熊猫}.any? {|字| word.length >= 4} #=> 真 [无,真实,99]。任何吗? #=> 真【讨论】:
ActiveRecord 的域中,它可能是可行的,但我看到很多对此感到困惑,人们认为这只是empty? 的否定,这通常不是真的。
[false].any? 是 false 有点讨厌。
[1,2,3].any? { |x| x > 2 }。不幸的是,它也可以在没有块的情况下工作(我看不出它在哪里有用)。
any? 是否在没有块的情况下工作更大的问题。
这可能会好一点:
unless current_user.received_replies.unread.empty?
【讨论】: