【问题标题】:Rollback after Execute in ActiveRecord在 ActiveRecord 中执行后回滚
【发布时间】:2015-03-29 12:32:08
【问题描述】:

我正在为 Rails 中的 sqlite3 数据库构建一个沙箱,以便人们可以自己查询数据。现在我只是像这样调用执行:

@results = ActiveRecord::Base.connection.execute(params[:query])

对于破坏性命令,我想在每次得到结果后回滚。有什么好的方法可以做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby activerecord sqlite rails-activerecord


    【解决方案1】:

    我给你准备了一些:

    Active Record 类 ActiveRecord::Base 具有名为 connection() 的方法 它使用返回到 MySQL(或其他)数据库的有效连接 config/database.yml 数据库设置。

    connection()方法的返回值是MysqlAdpater类的一个对象 (或 [some-other-database] 适配器)。这里有一些有用的方法 那个对象:

    • 执行 - 执行 SQL 查询。对于 "SELECT ..." 查询将返回 Mysql::Result 类(或您的 Ruby 的其他结果集类 数据库接口)。
    • insert - 执行 SQL 查询并返回最后插入的 id
    • 更新、删除 - 执行 SQL 查询并返回受影响的行数
    • begin_db_transaction - 执行 SQL 查询“BEGIN”(事务开始)
    • commit_db_transaction - 执行 SQL 查询“COMMIT”(确认事务)
    • rollback_db_transaction - 执行 SQL 查询“ROLLBACK”(回滚事务)

    还有方法select_all和select_one,但是我们没有 建议使用它,因为尝试执行效率低下 将所有选定的值提取到内存中。

    看看这个Documentation

    【讨论】:

    • 这是我自己找到的一些文档,但似乎找不到回滚查询的方法。在我运行execute 之后,我想回滚我刚刚执行的代码,或者至少回滚相同效果的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2015-11-15
    相关资源
    最近更新 更多