2011-11-02 36 views

Trả lời

108

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 } 
+0

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

+0

Có Tôi đã thiết lập lớp bản ghi hoạt động quan hệ. – Sayuj

-25

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

+1

Time.now không giống như Hôm nay –

0

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 
Các vấn đề liên quan