Chcę uzyskać wszystkie rekordy, w których pole created_at jest mniejsze niż obecnie (data). Czy istnieje coś takiego jak:Rekord aktywny - znajdź rekordy, które zostały utworzone przed dzisiejszym
MyTable.find_by_created_at(< 2.days.ago)
Chcę uzyskać wszystkie rekordy, w których pole created_at jest mniejsze niż obecnie (data). Czy istnieje coś takiego jak:Rekord aktywny - znajdź rekordy, które zostały utworzone przed dzisiejszym
MyTable.find_by_created_at(< 2.days.ago)
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 }
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
Time.now to nie to samo co Dzisiaj –
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
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
Tak Ustawiłem relację aktywną klasę rekordów. – Sayuj