0

インスタンス メソッドを使用してスコープを作成し、レコードをフィルター処理する最善の方法は何かと考えていました。これは私のモデルです:

class Promotion < ActiveRecord::Base

  scope :availables, lambda{ all.select{ |obj| obj.is_available? } }

  def is_available?
    Date.today <= Date.strptime(valid_thru, '%m/%d/%Y')
    ...more validations here
  end
end

ここでの問題は、このスコープが ActiveRecord::Relation ではなく配列を返し、他のスコープをチェーンできないことです。

何か提案はありますか?

4

1 に答える 1

0

あなたが望むものを達成する方法はありません。Ruby オブジェクトにロジックを適用したい場合、ActiveRecord::Relation を返すことはできなくなりました。

このようなことを実現する唯一の方法は、データベース レベルでロジックを使用することです。その場合、クラスメソッドを使用して、次のように目的を達成できます。

def availables
  where('valid_thru => ?', Date.today)
end
于 2013-03-29T11:49:11.770 に答える