2014-11-05 60 views
0

在控制檯我可以查詢我的Job表所示:jobs = Job.where("created_at <= ?", Time.now)的Rails 3.2 - ActiveRecord的`where`與方法查詢呼籲屬性

我想這是今年創建的作業。如果我得到一個人的工作,我可以使用job.created_at.year,但如果我嘗試使用jobs = Job.where("created_at.year = ?", 2014)我得到以下錯誤:

SQLite3::SQLException: no such column: created_at.year 

我想我明白這個問題是我想要的Ruby混合到一個SQL查詢,但我不確定如何避開它。理解這將幫助我創建更強大的ActiveRecord查詢。

編輯我發現我能做到使用.map喜歡所以這個:Job.all.map { |j| j if j.created_at.year == 2014 }。如果我想收集需要在屬性上調用方法的作業集合,那麼這是否是最好的方法?

回答

3

試試這個:

Job.where(:created_at => Time.now.beginning_of_year..Time.now.end_of_year) 

因爲,調用Time.now可能給出了兩個不同的年份(午夜之前和之後的12月31日),這將是最好先創建當前時間的變量在使用前在查詢:

current_time = Time.now 
Job.where(:created_at => current_time.beginning_of_year..current_time.end_of_year) 
+3

或者更簡單地使用MySQL的本地'YEAR()'函數:' 「?YEAR(created_at)=」'這將接受'Time.now.year' – 2014-11-05 18:42:30

+0

@MichaelBerkowski:哦,有趣。感謝您的投入。 :) – Surya 2014-11-05 18:44:54

+0

@ nikkon226:感謝您的編輯。 – Surya 2014-11-05 18:54:10