如何将像'has_man'这样的实时代码方法提取到lib中

时间:2009-08-14 14:48:41

标签: ruby-on-rails

以下代码工作正常。

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。我想知道是否有更好的方法来实现同样的目标。

1 个答案:

答案 0 :(得分:1)

你试过了吗?

base.send(:rescue_from, ...)