Muszę sprawdzić komentarze przesłane w ciągu jednego dnia. Pole jest częścią standardowych znaczników czasu, to created_at
. Wybrana data pochodzi z date_select
.
Jak mogę ActiveRecord
to zrobić?
Potrzebuję czegoś takiego:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
1..1000000000000
nie jestem pewien, co masz na myśli mówiąc o „używaniu zasięgu samego w sobie”scope :between, -> (a, b) { where(created_at: a..b) }
Osobiście stworzyłbym zakres, aby był bardziej czytelny i nadający się do ponownego użycia:
W swoim Comment.rb możesz zdefiniować zakres:
Następnie do zapytania utworzonego między:
Mam nadzieję, że to pomoże.
źródło
#between?
przyjęła zakres.Rails 5.1 wprowadził nową metodę pomocnika daty
all_day
, patrz: https://github.com/rails/rails/pull/24930Jeśli używasz Railsów 5.1, zapytanie będzie wyglądać następująco:
źródło
require 'active_record'
i gotowe!Ten kod powinien działać dla Ciebie:
Aby uzyskać więcej informacji, zobacz Obliczenia czasu
Uwaga: ten kod jest przestarzały . Użyj kodu z odpowiedzi, jeśli używasz Railsów 3.1 / 3.2
źródło
date()
funkcji na poziomie bazy danych; jest potencjalnie bardziej niezależny od db.Uruchomiłem ten kod, aby sprawdzić, czy zaznaczona odpowiedź działa, i musiałem spróbować zamienić daty, aby uzyskać poprawną odpowiedź. To zadziałało -
Jeśli myślisz, że wynik powinien wynosić 36, rozważ to, proszę pana, ile dni to 3 dni dla 3 osób?
źródło
źródło
Używałem 3 kropek zamiast 2. Trzy kropki dają zakres, który jest otwarty na początku i zamknięty na końcu, więc jeśli wykonasz 2 zapytania dla kolejnych zakresów, nie możesz odzyskać tego samego wiersza obie.
I tak, zawsze miło jest używać lunety!
źródło
Jeśli chcesz mieć tylko jeden dzień, byłoby łatwiej w ten sposób:
źródło
istnieje kilka sposobów. Możesz użyć tej metody:
Albo to:
źródło
Myślę, że w tym przypadku powinno być domyślne zachowanie aktywnego rekordu. Odpytywanie dat jest trudne, zwłaszcza gdy dotyczy to stref czasowych.
W każdym razie używam:
źródło
Możesz użyć poniższego klejnotu, aby znaleźć rekordy między datami,
Ten klejnot jest dość łatwy w użyciu i bardziej przejrzysty. Według gwiazdy używam tego klejnotu i interfejsu API bardziej przejrzystego, a dokumentacja również dobrze wyjaśniona.
Tutaj również można było przejść przez nasze pole
Post.by_month("January", field: :updated_at)
Zapoznaj się z dokumentacją i wypróbuj.
źródło