1

これは非常に単純なはずです。聞いて恥ずかしい思いをしているのかもしれません。:)
私はまだルビー/レールに慣れていませんが。

条件が満たされた場合、ループから抜け出したいです。
すべての商品が売れた時点で販売完了です。使えるようになりたい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

そのような各アイテムをループしたくないと思います。これは非常に非効率的です。より良い方法は、売れ残った商品の数を確認することです。たとえば、 true または false の値を格納するItems Tableという列があるとします。sold次に、これを行うことができます:

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