Ruby on rails 使用DataMapper查询查找当月的记录

Ruby on rails 使用DataMapper查询查找当月的记录,ruby-on-rails,activerecord,datamapper,Ruby On Rails,Activerecord,Datamapper,我试图重现我在ActiveRecord中使用的SQL查询: Post.all(:conditions => ["EXTRACT(MONTH from created_at) = ? AND EXTRACT(YEAR from created_at) = ?", month, year]) 但由于我正在将所有内容转换为DataMapper,我一直在寻找一种方法来实现这一点 有人能帮忙吗?我想,因为这是用“RubyonRails”标记的,您已经加载了ActiveSupport。这将提供时间-

我试图重现我在ActiveRecord中使用的SQL查询:

Post.all(:conditions => ["EXTRACT(MONTH from created_at) = ? AND EXTRACT(YEAR from created_at) = ?", month, year])
但由于我正在将所有内容转换为DataMapper,我一直在寻找一种方法来实现这一点


有人能帮忙吗?

我想,因为这是用“RubyonRails”标记的,您已经加载了ActiveSupport。这将提供时间-月末辅助方法。使用它,您可以将查询重写为:

time = Date.new(year, month).to_time

Post.all(:created_at => time..time.end_of_month)

这不仅简单,而且从查询中消除了原始SQL(因此该查询对RDBMS以外的事物更具可移植性),而且最重要的是,它的性能可能比其他查询要好得多。使用
EXTRACT
时,数据库可能需要执行一次完整的表扫描,从每一行中创建的\u中提取年份和月份,然后将它们与预期值进行比较。如果您有一个大的数据集,这可能会给数据库带来很大的负载。但是,如果您的“创建时间”列已编制索引,则上述方法在比较中应该非常有效。

您可以使用
time=Date.today.start\u of\u month.to\u time
来自动获取当前月份和年份。