我想获取所有创建日期早于今天的记录。
是否有类似这样的东西:
MyTable.find_by_created_at(< 2.days.ago)
MyTable.find_by_created_at(< 2.days.ago)
获取 MyTable
中所有在两天前之前创建的记录:
MyTable.where(created_at: Date.new..2.days.ago)
请注意,您也可以以类似的方式查找将来包含字段的记录,即要获取所有具有event_date
超过至少2天后的MyTable
记录:
MyTable.where(event_date: 2.days.from_now..DateTime::Infinity.new)
"created_at" BETWEEN $1 AND $2 [["created_at", "4713-01-01 BC"], ["created_at", "2020-03-31 21:43:28.113759"]]
。 - Pavel Chuchuva另一种方式是在 MyModel
或者 ApplicationRecord
中使用 Arel 接口创建一个作用域,就像 tokland 在 他的答案 中所建议的那样:
scope :col, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
使用范围的示例:
MyModel.col(:created_at, :lt, 2.days.ago)
对于所有的预测,请查看文档或源代码。这个作用域不会打破where
链。这意味着你也可以这样做:
MyModel.custom_scope1.col(:created_at, :lt, 2.days.ago).col(:updated_at, :gt, 2.days.ago).custom_scope2
ActiveRecord::Relation
定义了一个名为 arel
的实例方法,这意味着您只需要选择另一个名称即可。 - M-Dahab
MyTable1.where(MyTable[:created_at] < Time.now)
的语句,这样可以吗? - Sayuj