如何中止给定块内的所有数据库保存操作?

时间:2014-06-30 02:24:02

标签: ruby-on-rails

我在我们的网络应用中实施了公共现场演示功能。

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

类似的东西:

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查询,而不是实际处理它们。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

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

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