sql >> Database teknologi >  >> RDS >> PostgreSQL

Sorterbare UUID'er og tilsidesættende ActiveRecord::Base

Først og fremmest first og last er ikke så simple, som du synes at tro, de er:du forsømmer fuldstændig limit argument, som begge disse metoder understøtter.

For det andet scope er lidt mere end en fancy måde at tilføje klassemetoder, der er beregnet til at returnere forespørgsler. Dine scopes misbruger scope fordi de returnerer enkelte modelforekomster i stedet for forespørgsler. Du ønsker ikke at bruge scope overhovedet, du prøver bare at erstatte den first og last klassemetoder, så hvorfor tilsidesætter du dem ikke bare? Du bliver dog nødt til at tilsidesætte dem korrekt, og det vil kræve at læse og forstå Rails-kilden, så du korrekt efterligner det find_nth_with_limit gør. Du vil gerne tilsidesætte second , third , ... og resten af ​​de dumme metoder, mens du er i gang.

Hvis du ikke føler dig rigtig med at erstatte first og last (en god ting IMO), så kan du tilføje et standardomfang for at bestille tingene som ønsket:

default_scope -> { order(:created_at) }

Selvfølgelig kommer standard scopes med deres egne problemer, og at snige ting ind i ORDER BY på denne måde vil sandsynligvis tvinge dig til at ringe til reorder når som helst du rent faktisk ønsker at specificere ORDER BY; husk, at flere opkald til order tilføje nye bestillingsbetingelser, de erstatter ikke en, der allerede er der.

Alternativt, hvis du bruger Rails6+, kan du bruge Markus' implicit_order_column løsning for at undgå alle de problemer, som standardomfang kan forårsage.

Jeg tror, ​​du tager fejl af det her. Hver gang jeg ser M.first Jeg går ud fra, at noget er blevet glemt. Bestilling af ting efter id er stort set ubrugelig, så du bør altid manuelt angive den rækkefølge, du ønsker, før du bruger metoder som first og last .



  1. Ude af stand til at ramme oracle lagret proc ved hjælp af .Net EF(2.2) Core repository mønster

  2. JPA-arv @EntityGraph inkluderer valgfri tilknytninger af underklasser

  3. Ret "SQL-server blokerede adgang til ERKLÆRING 'OpenRowset/OpenDatasource' for komponenten 'Ad Hoc Distributed Queries'

  4. Eksporter SQLite-database til XML-fil