PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

UUID с възможност за сортиране и замяна на ActiveRecord::Base

Първо, first и last не са толкова прости, колкото си мислите, че са:вие напълно пренебрегвате limit аргумент, който и двата метода поддържат.

Второ, scope е малко повече от изискан начин за добавяне на методи на клас, които са предназначени да връщат заявки. Вашите обхвати злоупотребяват с scope защото те връщат единични екземпляри на модела, а не заявки. Не искате да използвате scope изобщо, вие просто се опитвате да замените first и last методи на клас, така че защо просто не ги замените? Все пак ще трябва да ги замените правилно и това ще изисква четене и разбиране на източника на Rails, така че правилно да имитирате какво find_nth_with_limit прави. Бихте искали да замените second , third , ... и останалите глупави методи, докато сте там.

Ако не смятате, че трябва да замените first и last (добро нещо IMO), тогава можете да добавите обхват по подразбиране, за да подредите нещата по желание:

default_scope -> { order(:created_at) }

Разбира се, обхватите по подразбиране идват със собствен набор от проблеми и промъкването на неща в ORDER BY по този начин вероятно ще ви принуди да извикате reorder всеки път, когато действително искате да посочите ORDER BY; запомнете, че множеството извиквания към order добавете нови условия за поръчка, те не заместват вече съществуващите.

Като алтернатива, ако използвате Rails6+, можете да използвате implicit_order_column на Markus решение за да избегнете всички проблеми, които могат да причинят обхватите по подразбиране.

Мисля, че мислите погрешно. Всеки път, когато видя M.first Предполагам, че нещо е забравено. Подреждане на неща по id е почти безполезен, така че трябва да винаги ръчно задайте реда, който искате, преди да използвате методи като first и 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. Правилен начин за добавяне на неекраниран текст от поле към регулярен израз в postgres?

  2. Пет страхотни неща, които научих на PostgreSQL Conference Europe 2018

  3. Как да възстановя конкретни данни от предишно архивиране на Postgres Heroku? (Напр. Случайно изтрити редове)

  4. Как мога да съпоставя последните две думи в изречение в PostgreSQL?

  5. pg gem '0.14.0' на Mountain Lion се проваля