rails console --sandbox uruchamia konsolę Rails w specjalnym trybie, w którym wszystkie zmiany wprowadzone w bazie danych są automatycznie cofane po zakończeniu sesji konsoli. Ta opcja zapewnia bezpieczne środowisko do testowania, w którym możesz eksperymentować z danymi, nie martwiąc się o trwałe zmiany.
Nigdy wcześniej nie używałem opcji
--sandbox. Ale w ostatnich dniach zacząłem ją aktywnie wykorzystywać. Czasami zdarza się, że po zanieczyszczeniu lokalnej bazy danych trzeba ją zresetować. Piaskownica pozwala zaoszczędzić trochę czasu. Wszystkie działania w konsoli są owinięte w dużą, inteligentną
atomową transakcję.
Jak działa rails console --sandbox?
Użycie polecenia
rails console --sandbox otwiera interaktywną konsolę w 'trybie bezpiecznym'. Każda operacja na bazie danych odbywa się wewnątrz transakcji. Po wyjściu z konsoli wszystkie transakcje są automatycznie cofane. To pozwala bezpiecznie testować zmiany i sprawdzać kod bez ryzyka uszkodzenia danych w bazie danych.
Przykład
rails console --sandbox
Loading development environment in sandbox (Rails 7.0.4.3)
Any modifications you make will be rolled back on exit
User.create!(name: 'R2D2', email: '[email protected]', password: 'Password666%', password_confirmation: 'Password666%')
irb(main):001:0> User.create!(name: 'R2D2', email: '[email protected]', passw
ord: 'Password666%', password_confirmation: 'Password666%')
TRANSACTION (0.8ms) BEGIN
TRANSACTION (0.6ms) SAVEPOINT active_record_1
User Exists? (3.8ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "[email protected]"], ["LIMIT", 1]]
User Create (5.4ms) INSERT INTO "users" ............
TRANSACTION (1.9ms) RELEASE SAVEPOINT active_record_1
=> #<User id: 41, email: "[email protected]", created_at: "2024-05-23 19:31:20.142273000 +0000", updated_at: "2024-05-23 19:31:20.142273000 +0000", name: "R2D2" ....>
Zwróć uwagę na
TRANSACTION (1.9ms) RELEASE SAVEPOINT active_record_1
Wychodzimy z konsoli (transakcja powinna się cofnąć). Wchodzimy ponownie i sprawdzamy User.last.id. W piaskownicy stworzyliśmy użytkownika z id
41.
irb(main):002:0> exit
~/Documents/experiments/sandbox rails console
Loading development environment (Rails 7.0.4.3)
irb(main):001:0> User.last.id
User Load (1.9ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1 [["LIMIT", 1]]
=> 40
Widzimy, że ostatni zapisany użytkownik to 40. To znaczy, że transakcja zadziałała.