around_action为了大幅度减少代码重复,我想要写了一个特殊around_action
添加到控制器的通用的方式值得关注。它基本上应该是捕捉任何异常,渲染正确的模板并添加异常作为通知。但是,它必须适用于不同的操作,并根据操作显示不同的模板。我的目标是基本上能够做到这一点:轨道4:用参数
protect_from_exception_with 'index', only: [ :update ]
为了实现这一点,我试着写我的关心就像这样(用Rails 4.1):
module CatchException
extend ActiveSupport::Concern
module ClassMethods
def protect_from_exception_with(failure_template, params)
around_action -> { catch_exception_with(failure_template) }, params
end
end
private
def log_error(e)
# Many things happen here
end
def catch_exception_with(failure_template)
yield
rescue => e
log_error(e)
render failure_template
end
end
然而,这导致一个错误:
LocalJumpError: no block given (yield)
我一直试图找到around_action
或around_filter
带有参数的例子,但只能找到他们before_action
。
我希望我努力实现的是所有可能的,否则我需要在每个控制器中编写一个新的方法来实现这个目标。
'catch_exception_with'需要采取一个块,你需要传递一个块到'around_action'了。 – fylooi
@fylooi我数字一样多,但我无法弄清楚如何做到这一点。我不是一个真正的红宝石巫师。 – Lanbo
有趣的是,它似乎是为我工作用'protect_from_exception_with(编辑,只:表演)' – fylooi