W tym odcinku chciałbym pokazać wam jak i dlaczego używać uuid zamiast id jako klucza podstawowego w Ruby on Rails.

Na początek może czym jest uuid - uniwersalny, unikalny identyfikator. id domyślnie jest kolejną liczbą w bazie, uuid natomiast jest stringiem

1 vs ccbb63c0-a8cd-47b7-8445-5d85e9c80977

tutaj widzicie dwa przykłady, pierwszy to id, drugie to właśnie uuid.

ok to tyle w teorii, po co używać uuid?

dla bezpieczeństwa

np link do notatek z tego odcinka, każdy kto ma link może to otworzyć bez logowania, ale w gruncie rzeczy nie każdy powinien mieć w to wgląd

albo serwis do udostępniania plików, chcecie coś podesłać znajomemu ale nie całemu światu

jeżeli używamy id, każdy może dodać lub zmniejszyć twój numer i otworzyć url nie koniecznie dostępny dla niego

oczywiście w dobrze by było dodać jakieś zabezpieczenie jeżeli treści nie powinny być publiczne, ale nie to jest tematem tego odcinka

inną przydatną rzeczą jest ukrywanie informacji o ilości “danych” w aplikacji

jeżeli mamy url users/13 to wiadomo, że przed nami rejestrowało się 12 użytkowników, w przypadku uuida takiej informacji nie mamy

tak więc najważniejsze, jest to, że ukrywamy poufne informacje

ok, czas na implementacje

na początek w naszej bazie potrzebujemy rozszerzenia pgcrypto

tworzymy nową migracje

rails generate migration EnableUUID

class EnableUUID < ActiveRecord::Migration
  def change
    enable_extension 'pgcrypto'
  end
end

i uruchamiamy migracje

rails db:migrate

jeżeli chcemy by w przyszłości domyślnie tworząc migracje używać uuid należy w pliku config/initializers/generators.rb dodać

Rails.application.config.generators do |g|
  g.orm :active_record, primary_key_type: :uuid
end

aktualnie korzystam z nowej aplikacji więc utwórzmy sobie jakąś tabele, oraz model przy okazji

rails generate scaffold Post title:string body:text

odpalmy migracje

rails db:migrate

i włączmy serwer rails s

w przedlądarce włączmy http://localhost:3000/posts

utwórzmy nowy post

jak widzicie w adresie url, zamiast id, jest uuid

To by było na tyle

Miłego kodowania

Kod aplikacji