我想獲取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