Rails console is a powerful tool for interacting with your Rails application’s code and database. But what if you want to experiment with changes without affecting your production data? Enter the
rails c --sandbox, you can launch the console in a sandboxed environment. Any modifications made during the session are rolled back, keeping your database intact.
This feature is especially useful for testing queries, making temporary changes, or debugging. You can try out new code snippets, experiment with database operations, or run complex queries without the fear of permanently altering your data.
To use the
--sandbox option, simply open your terminal, navigate to your Rails project’s directory, and run
rails c --sandbox. Now you have a console session where you can freely explore and test without the risk of making irreversible changes.
Let’s see an example of how to use the
--sandbox option. After launching the sandbox console, let’s delete an
User object, using the following code:
1 $ rails c --sandbox
1 2 3 4 5 6 7 8 9 Loading development environment in sandbox (Rails 22.214.171.124) Any modifications you make will be rolled back on exit irb(main):001:0> User.first.destroy (0.1ms) begin transaction User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] User Destroy (0.3ms) DELETE FROM "users" WHERE "users"."id" = ? [["id", 1]] (2.0ms) commit transaction #=> <User id: 1, name: "John", created_at: "2023-05-30 12:00:00", updated_at: "2023-05-30 12:00:00">
User.first.destroy command will delete the first user from the database. However, when you exit the sandbox console and run the Rails console without the
--sandbox flag, you’ll notice that the first user still exists
Remember, once you exit the sandbox console, all modifications made during the session are discarded. If you want to persist any changes, you need to apply them outside the sandbox.
1 irb(main):002:0> exit
1 $ rails c
1 2 3 4 Loading development environment (Rails 126.96.36.199) irb(main):001:0> User.first User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] #=> <User id: 1, name: "John", created_at: "2023-05-30 12:00:00", updated_at: "2023-05-30 12:00:00">
This demonstrates the safety and isolation provided by the
--sandbox option. Changes made within the sandbox console do not persist outside of it, ensuring the integrity of your data.