sql >> Databasteknik >  >> RDS >> PostgreSQL

Sorterbara UUID och åsidosättande ActiveRecord::Base

Först och främst, first och last är inte så enkla som du verkar tro att de är:du försummar fullständigt limit argument som båda dessa metoder stödjer.

För det andra, scope är lite mer än ett fint sätt att lägga till klassmetoder som är avsedda att returnera frågor. Dina omfattningar missbrukar scope eftersom de returnerar enstaka modellinstanser snarare än frågor. Du vill inte använda scope överhuvudtaget försöker du bara ersätta den first och last klassmetoder så varför åsidosätter du dem inte bara? Du måste dock åsidosätta dem ordentligt och det kommer att kräva att du läser och förstår Rails-källan så att du korrekt efterliknar vad find_nth_with_limit gör. Du vill åsidosätta second , third , ... och resten av de dumma metoderna medan du håller på.

Om du inte känner dig rätt om att byta ut first och last (bra IMO), då kan du lägga till ett standardomfång för att beställa saker som önskat:

default_scope -> { order(:created_at) }

Naturligtvis kommer standardomfång med sina egna problem och att smyga in saker i ORDER BY så här kommer förmodligen att tvinga dig att ringa reorder när som helst du faktiskt vill ange ORDER BY; kom ihåg att flera samtal för att order lägg till nya beställningsvillkor, de ersätter inte en som redan finns där.

Alternativt, om du använder Rails6+, kan du använda Markus's implicit_order_column lösning för att undvika alla problem som standardomfattningar kan orsaka.

Jag tror att du tänker fel på det här. Varje gång jag ser M.first Jag antar att något har glömts bort. Beställa saker efter id är ganska värdelös så du bör alltid ange manuellt den ordning du vill ha innan du använder metoder som first och last .



  1. psql - spara resultat av kommandot till en fil

  2. ODBC-administratör kan inte hitta Oracle TNS-namnfil

  3. Öka räknare och räls först med postgreSQL konstigt beteende

  4. Få den enda senaste informationen från förra veckan och summera någon kolumn