一連の基準に基づいて、データベースから多数のアイテムを返すことを目的としたメソッドがあります。
scope :expired_not_marked, lambda { |client|
items = where('items.status > 0 AND items.expires_at < ? AND items.expired_at IS NULL AND (winning_bid_id IS NULL OR winner_id IS NULL)', Time.now)
unless client.nil?
items.where('items.client_id = ?', client.id)
end
}
と呼ばれていItem.expired_not_marked nil
ます。IRB からこれを実行すると、多くの結果が得られますが、SQL クエリが次のように実行されていることが示されます。
SELECT `items`.* FROM `items`
それが原作者の意図ではないことは明らかです。その結果、同じアイテムが何度も処理されています。
なぜこれが壊れているのですか、どうすれば修正できますか。where句は正しいようです。上記のメソッドはitem.rb
モデル内にあります。