Tôi muốn lấy tất cả các bản ghi mà trường created_at nhỏ hơn ngày hôm nay (một ngày). Có điều gì như:Active Record - Tìm các hồ sơ đã được tạo trước ngày hôm nay
MyTable.find_by_created_at(< 2.days.ago)
Tôi muốn lấy tất cả các bản ghi mà trường created_at nhỏ hơn ngày hôm nay (một ngày). Có điều gì như:Active Record - Tìm các hồ sơ đã được tạo trước ngày hôm nay
MyTable.find_by_created_at(< 2.days.ago)
Sử dụng ActiveRecord cách tiêu chuẩn:
MyModel.where("created_at < ?", 2.days.ago)
Sử dụng Arel giao diện cơ bản:
MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago))
Sử dụng một simple thin layer qua Arel:
MyModel.where(MyModel[:created_at] < 2.days.ago)
Sử dụng thư viện squeel:
MyModel.where { created_at < 2.days.ago }
Time.now đề cập đến ngay bây giờ hoặc này rất thứ hai. Vì vậy, để tất cả người dùng trước khi ngay bây giờ chỉ cần sử dụng
@users = User.all
này sẽ tìm thấy tất cả người dùng trước khi ngay bây giờ và sẽ loại trừ người dùng trong tương lai hoặc những người dùng tham gia sau khi Time.now
Time.now không giống như Hôm nay –
Một cách khác là tạo ra một phạm vi trong MyModel
hoặc trong ApplicationRecord
bằng cách sử dụng giao diện Arel như tokland sugensted trong his answer như vậy:
scope :arel, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
Ví dụ sử dụng các phạm vi:
MyModel.arel(:created_at, :lt, 2.days.ago)
Đối với tất cả các dự đoán, hãy kiểm tra documentation hoặc source code. Phạm vi này không phá vỡ chuỗi where
. Điều này có nghĩa là bạn cũng có thể làm:
MyModel.custom_scope1.arel(:created_at, :lt, 2.days.ago).arel(:updated_at, :gt, 2.days.ago).custom_scope2
thanks !. Nếu tôi cần tất cả các bản ghi từ MyTable1 là mối quan hệ một với một với MyTable trên cùng một điều kiện, làm thế nào để viết truy vấn? Tôi đã đề cập đến một cái gì đó như 'MyTable1.where (MyTable [: created_at]
Sayuj
Có Tôi đã thiết lập lớp bản ghi hoạt động quan hệ. – Sayuj