以下代码工作正常。
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, :with => :bad_record
def bad_record
redirect_to root_url
end
端
但是我想重构代码并将此功能放在lib中,因为我的应用程序控制器已经变大了。
这就是我提出的并且有效。
class ApplicationController < ActionController::Base
include RescueFromRecordNotFound
end
\#lib/rescue_from_record_not_found.rb
module RescueFromRecordNotFound
def self.included(base)
tmp = "rescue_from ActiveRecord::RecordNotFound, :with => :bad_record"
base.send(:eval,tmp)
base.send(:include, InstanceMethods)
end
module InstanceMethods
def bad_record
redirect_to root_url
end
端 端
解决方案有效。但是我真的不喜欢dong eval。我想知道是否有更好的方法来实现同样的目标。
答案 0 :(得分:1)
你试过了吗?
base.send(:rescue_from, ...)