PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

UUID z możliwością sortowania i nadpisywanie ActiveRecord::Base

Przede wszystkim first i last nie są tak proste, jak Ci się wydaje, że są:całkowicie lekceważysz limit argument, który obsługuje obie te metody.

Po drugie, scope to niewiele więcej niż wymyślny sposób dodawania metod klas, które mają zwracać zapytania. Twoje zakresy nadużywają scope ponieważ zwracają instancje pojedynczego modelu, a nie zapytania. Nie chcesz używać scope w ogóle, po prostu próbujesz zastąpić first i last metody klas, więc dlaczego ich po prostu nie zastąpisz? Musisz je jednak poprawnie zastąpić, a to będzie wymagało przeczytania i zrozumienia źródła Rails, aby prawidłowo naśladować to, co find_nth_with_limit czy. Chciałbyś zastąpić second , third , ... i resztę tych głupich metod, kiedy już przy tym jesteś.

Jeśli nie czujesz się dobrze, zamień first i last (Dobra rzecz IMO), możesz dodać domyślny zakres, aby uporządkować rzeczy według potrzeb:

default_scope -> { order(:created_at) }

Oczywiście domyślne zakresy mają swój własny zestaw problemów, a wkradanie się do ORDER BY w ten sposób prawdopodobnie zmusi cię do wywołania reorder za każdym razem, gdy faktycznie chcesz określić ORDER BY; pamiętaj, że wielokrotne wywołania order dodaj nowe warunki zamówienia, nie zastępują one już istniejących.

Alternatywnie, jeśli używasz Rails6+, możesz użyć implicit_order_column Markusa rozwiązanie aby uniknąć wszystkich problemów, które mogą powodować domyślne zakresy.

Myślę, że robisz to źle. Za każdym razem, gdy widzę M.first Zakładam, że o czymś zapomniano. Zamawianie rzeczy według id jest prawie bezużyteczny, więc powinieneś zawsze ręcznie określ żądaną kolejność przed użyciem metod takich jak first i last .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwencje nazewnictwa PostgreSQL

  2. Heroku psql:FATAL:pozostałe gniazda są zarezerwowane dla połączeń superużytkownika bez replikacji

  3. SQL:Dodaj kolumnę z przyrostowym identyfikatorem do SELECT

  4. psycopg2 nie widzi mojej instancji PostgreSQL

  5. Usunąć nazwany wolumin za pomocą docker-compose?