2011-11-02 13 views

Odpowiedz

108

Korzystanie ActiveRecord standardowy sposób:

MyModel.where("created_at < ?", 2.days.ago) 

Wykorzystując bazę Arel interfejs:

MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago)) 

Używanie simple thin layer nad AREL:

MyModel.where(MyModel[:created_at] < 2.days.ago) 

Korzystanie z biblioteki squeel:

MyModel.where { created_at < 2.days.ago } 
+0

dzięki !. Jeśli potrzebuję wszystkich rekordów z MyTable1, który jest jeden do jednego relacji z MyTable na tym samym warunku, jak napisać zapytanie? Miałem na myśli coś w stylu 'MyTable1.where (MyTable [: created_at] Sayuj

+0

Tak Ustawiłem relację aktywną klasę rekordów. – Sayuj

-25

Time.now odnosi się teraz czy to bardzo drugi. Więc znalezienie wszystkich użytkowników przed teraz wystarczy użyć

@users = User.all 

ta znajdzie wszystkich użytkowników przed teraz i wykluczy przyszłych użytkowników lub użytkowników, które łączą po Time.now

+1

Time.now to nie to samo co Dzisiaj –

0

Innym sposobem jest stworzenie zakresu w MyModel lub ApplicationRecord pomocą Arel interfejs jak tokland sugensted w his answer tak:

scope :arel, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) } 

przykład użycia zakresu:

MyModel.arel(:created_at, :lt, 2.days.ago) 

Dla wszystkich predications, sprawdź documentation lub source code. Ten zakres nie łamie łańcucha where. Oznacza to, że możesz również:

MyModel.custom_scope1.arel(:created_at, :lt, 2.days.ago).arel(:updated_at, :gt, 2.days.ago).custom_scope2 
Powiązane problemy