条件匹配时突破循环

时间:2013-02-21 21:58:22

标签: ruby-on-rails ruby ruby-on-rails-3 loops conditional-statements

这应该很简单。通过询问可能会让自己感到尴尬。 :)
虽然我还是ruby / rails的新手。

如果满足条件,我想摆脱循环 所有商品售出后销售完成。我希望能够使用sale.is_complete?

class Sale < ActiveRecord::Base
  has_many :items

  def is_complete?
    items.each do |item|
      # as soon as i encounter an unsold item, i want to return false to is_complete
      # item.is_sold? will return true or false
    end
  end

end

3 个答案:

答案 0 :(得分:7)

在这种情况下,循环不是最好的方法。

def is_complete?; items.all?(&:is_sold?) end

答案 1 :(得分:3)

也许不那么尴尬:

  def is_complete?
    items.each do |item|
      if not item.is_sold? then return false
    end
    return true
  end

答案 2 :(得分:3)

我认为你不想像这样循环每个项目。这将是非常低效的。更好的方法是检查未售出物品的数量。例如,假设Items Table有一个名为sold的列,用于存储true或false值。然后我们可以这样做:

def is_complete?
  items.where(sold: false).present?
end