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)
我想这并不重要,但我很好奇这里的内容正在发生什么.
谢谢,马克
由于控制台在沙盒模式下充当一个大事务,因此您只能通过控制台查看插入.
如果您通过除控制台之外的任何其他方法连接到您的数据库,那么它将使用不同的连接,并且控制台正在执行的操作将从该连接隐藏,因为它们尚未提交.
当连接使用事务与数据库进行通信时,其他数据库连接在提交之前无法看到它所做的任何更改.与事务的连接(在本例中为沙盒控制台)是唯一可以在回滚之前查看它对数据库所做的更改的连接.
使用该--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).保存数据,然后立即"释放".它仅用于测试目的,以检查模型,验证等之间的关系是否正常.