什么数据库导轨3控制台--sandbox使用?

Mar*_*ark 4 console ruby-on-rails ruby-on-rails-3.2

当我运行"rails console --sandbox"时,我无法在数据库中看到插入内容.当我关闭选项时,我能够很好地查看开发数据库中的数据.从控制台的一切看起来都是一样的.我正在使用在Hartl的rails教程中设置的postgreSQL.我查看了每个数据库,开发,测试,Postgres.但无法找到我使用控制台创建的数据.当我使用bundel时,我尝试了"捆绑exec"

这是我的database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: sample_app_development
  pool: 5
  timeout: 5000
  username: user
  password:

test:
  adapter: postgresql
  encoding: unicode
  database: sample_app_test
  pool: 5
  timeout: 5000
  username: user
  password:
Run Code Online (Sandbox Code Playgroud)

我想这并不重要,但我很好奇这里的内容正在发生什么.

谢谢,马克

Chr*_*son 6

由于控制台在沙盒模式下充当一个大事务,因此您只能通过控制台查看插入.

如果您通过除控制台之外的任何其他方法连接到您的数据库,那么它将使用不同的连接,并且控制台正在执行的操作将从该连接隐藏,因为它们尚未提交.

当连接使用事务与数据库进行通信时,其他数据库连接在提交之前无法看到它所做的任何更改.与事务的连接(在本例中为沙盒控制台)是唯一可以在回滚之前查看它对数据库所做的更改的连接.


Ger*_*rep 5

使用该--sandbox选项,您永远不会看到数据库中保存的任何内容.退出控制台时,将恢复使用此模式所做的任何更改.

使用此选项启动控制台时,您可以阅读:您所做的任何修改都将在退出时回滚

更多信息

如果你再试一次,你会SAVEPOINT active_record_1在插入之前和之后看到你会看到RELEASE SAVEPOINT active_record_1

阅读这两个链接,您将更好地了解正在发生的事情. http://www.postgresql.org/docs/8.1/static/sql-savepoint.html http://www.postgresql.org/docs/9.1/static/sql-release-savepoint.html

更多信息2 =)

正如你在这两个链接上看到的那样,PostgreSQL会创建一个SAVEPOINT,然后保存对象RELEASE SAVEPOINT.它不会永久保存这些数据,这不是如何--sandbox使用(IMO).保存数据,然后立即"释放".它仅用于测试目的,以检查模型,验证等之间的关系是否正常.