Зміст дописунатисність на посилання, щоб перейти до потрібного місця
rails console --sandbox запускає консоль Rails у спеціальному режимі, де всі зміни, внесені в базу даних, автоматично скасовуються після завершення сеансу консолі. Цей прапорець надає безпечне середовище для тестування, де ви можете експериментувати з даними, не турбуючись про постійні зміни.
Я ніколи раніше не використовував опцію --sandbox. Але останніми днями почав активно використовувати. Іноді буває так, що насмітивши в локальну базу даних треба її ресетити. Пісочниця дозволяє трохи зекономити часу. Всі дії в консолі обгорнуті в велику, розумну атомарну транзакцію.
Як працює rails console --sandbox?
Використання команди rails console --sandbox відкриває інтерактивну консоль в 'безпечному режимі'. Кожна операція з базою даних відбувається всередині транзакції. Після виходу з консолі всі транзакції автоматично відкатуються. Це дозволяє безпечно тестувати зміни та перевіряти код без ризику пошкодження даних у базі даних.
Приклад
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" ....>
Зверніть увагу на TRANSACTION (1.9ms) RELEASE SAVEPOINT active_record_1
Виходимо з консолі (транзакція має видкатитись). Заходимо знову і перевіряємо User.last.id. В пісочниці ми створили юзера з 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
Бачимо, що останній збережений юзер - 40. Тобто, транзакція спрацювала.