的Rails 3.2 - ActiveRecord的`where`与方法查询呼吁属性

问题描述:

在控制台我可以查询我的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 }。如果我想收集需要在属性上调用方法的作业集合,那么这是否是最好的方法?

试试这个:

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