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