2011-04-22 42 views
1

使用Rails 2.3.9應用程序,想知道如何編寫我的named_scope,使得我只從當前日期獲得workouts。我正在使用before_filter在應用程序控制器中設置時區。下面不會引發錯誤,只是不過濾:date_today的named_scope Rails 2.3.9

workout.rb

named_scope :today_only, :conditions => [ "workouts.created_at <= ? AND workouts.created_at >= ?", Time.zone.now, 1.days.ago ] 

application_controller.rb

before_filter :set_user_time_zone 
+0

你是否試圖傳遞命名的作用域變量? – nowk 2011-04-22 04:47:40

+0

嘗試在你的named_scope中使用lambda塊。這可能是緩存問題。 – Ashish 2011-04-22 04:53:54

回答

3

你沒有看到你想要因爲Ruby響應正在評估你對Time.now的調用,當它評估你的類定義時,而不是你調用範圍時。你需要一個lambda傳遞給您的通話named_scope讓它在每次請求評估:

# ensure that Time.now is evaluated on every call 
named_scope :today_only, lambda {{ :conditions => ["workouts.created_at BETWEEN ? AND ?", Time.zone.now.at_beginning_of_day, Time.zone.now.end_of_day ] }} 

另外,我覺得你的時間界限可能不正確。您是否在尋找過去24小時內創建的workouts(相對於Time.now),還是僅在今天創建的鍛鍊?您的示例適用於前者,上述示例適用於後者。

+0

這一切都有道理,它是我想要的更晚。但是......當我把它放入時出現這個錯誤:'undefined method'at_start_of_day'for Fri Apr 22 08:52:58 UTC 2011:Time' – bgadoci 2011-04-22 13:54:06

+0

ACK!對不起,該方法實際上是'at_beginning_of_day' – 2011-04-23 00:16:23

+0

大成功!!! – bgadoci 2011-04-25 15:59:17