我想获取created_at字段小于今天(日期)的所有记录。 是否有类似的东西:活动记录 - 查找在今天之前created_at的记录
MyTable.find_by_created_at(< 2.days.ago)
我想获取created_at字段小于今天(日期)的所有记录。 是否有类似的东西:活动记录 - 查找在今天之前created_at的记录
MyTable.find_by_created_at(< 2.days.ago)
使用ActiveRecord的标准方式:
MyModel.where("created_at < ?", 2.days.ago)
使用底层Arel接口:
MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago))
使用simple thin layer在阿雷尔:
MyModel.where(MyModel[:created_at] < 2.days.ago)
使用库squeel:
MyModel.where { created_at < 2.days.ago }
Time.now是指现在还是这个非常第二。因此,要找到所有用户面前,现在只是用
@users = User.all
这会发现所有用户之前,现在和将排除将来加入用户或用户之后Time.now
Time.now与Today不一样 –
另一种方法是创建一个范围MyModel
或ApplicationRecord
使用Arel接口等tokland在his answer sugensted像这样:
scope :arel, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
实例:
MyModel.arel(:created_at, :lt, 2.days.ago)
对于所有的断言,检查documentation或source code。这个范围不会破坏where
链。这意味着你也可以这样做:
MyModel.custom_scope1.arel(:created_at, :lt, 2.days.ago).arel(:updated_at, :gt, 2.days.ago).custom_scope2
谢谢!如果我需要MyTable1中的所有记录(与MyTable在同一条件下是一对一关系),如何编写查询?我指的是像MyTable1.where(MyTable [:created_at]
Sayuj
是的,我设置了关联活动记录类。 – Sayuj