1

这应该很简单。可能是问我自己很尴尬。:)
虽然我还是 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
4

3 回答 3

7

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

def is_complete?; items.all?(&:is_sold?) end
于 2013-02-21T22:08:03.517 回答
3

也许没有那么尴尬:

  def is_complete?
    items.each do |item|
      if not item.is_sold? then return false
    end
    return true
  end
于 2013-02-21T22:03:14.097 回答
3

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

def is_complete?
  items.where(sold: false).present?
end
于 2013-02-21T22:09:08.890 回答