我要在我们的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