如何在给定块内中止所有DB保存操作

  • 本文关键字:DB 操作 保存 ruby-on-rails
  • 更新时间 :
  • 英文 :


我要在我们的web应用程序中实现一个公开的实时演示功能。

由于这是一个公共演示,我们不希望任何数据库更改生效(防止滥用),相反,他们只是成功运行,但没有触及数据库。

类似:

class PostsController < ApplicationController   
  def update
    disable_save_operations if @current_account.live_demo?
    @post = Post.find params[:id]
    @post.update_attributes params[:post]
  end
end

理想情况下,我希望保持相同的功能,但默默地丢弃任何UPDATE, DELETE或INSERT查询,而不是实际处理它们。

我怎么能做这样的事情?

这是未经测试的,但我相信你可以这样做。

def rollback_if_demo(&block)
  ActiveRecord::Base.transaction do
    yield
    raise ActiveRecord::Rollback if @current_account.live_demo?
  end
end

那么就这样命名

rollback_if_demo do
  @post = Post.find params[:id]
  @post.update_attributes params[:post]
end

最新更新