0

私は次のスコープを持っています:

scope :this_month, :conditions => ["created_at >= ?", Date.today.beginning_of_month]

これにより、次のSQL出力が作成されますa.response_sets.this_month.to_sql

SELECT "response_sets".* FROM "response_sets" WHERE created_at >= '2012-05-01'

しかし、今日は実際には6月1日なので、その日付は間違っているようです。そこで、スコープをバイパスして、次のように条件を直接実行してみました。

a.response_sets.where(["created_at >= ?", Date.today.beginning_of_month]).to_sql

次に、出力します。

SELECT "response_sets".* FROM "response_sets" WHERE created_at >= '2012-06-01'

どちらが正しい。Date.today.beginning_of_monthでは、スコープで実行することと、スコープで直接実行することの間に違いがあるのはなぜwhereですか?

4

1 に答える 1

5

スコープで日付を操作するときは、ラムダを使用して、スコープが呼び出されるたびに評価されるようにする必要があります。

scope :this_month, -> { where("created_at >= ?", Date.today.beginning_of_month) }
于 2012-06-01T12:24:27.340 に答える