Rifinements或猴子修补导轨4

时间:2014-12-27 16:06:44

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-2.0

我正在使用rail4和ruby 2.0,我想在 ActiveModel :: Errors 中添加一个方法" first_error" 申请,所以我遇到了两种可能性:

  • Monkey Patch
  • 细化

我已成功实施第一种方法,只需创建初始化程序" custom_model_error.rb"

class ActiveModel::Errors
  def first_error
    if !self.first
      return nil
    end
    data = Hash.new
    data['error_code'] = '900'
    data['message'] = self.first.join(' ')
    return data
  end
end

但是当我尝试通过在lib目录中定义模块来实现第二种方法时:

  module RefineErrors
    refine ActiveModel::Errors do
      def first_error
        if !self.first
          return nil
        end
        data = Hash.new
        data['error_code'] = '900'
        data['message'] = self.first.join(' ')
        return data
      end
    end
  end

然后在ApplicationController中使用此模块:

class ApplicationController < ActionController::API
   using RefineErrors

我收到错误未定义的方法&#39;使用&#39;

现在我的问题是:

这是目前实施的最佳方法
通常不建议使用Monkey Patching,并且改进是ruby 2.0的实验性功能

还想知道如何使用rails4 中的优化实现这一点?

如果在这种情况下应该遵循任何其他方法,请同时提及。

1 个答案:

答案 0 :(得分:0)

如果您使用的是ruby 2.0,则需要使用支持细化的红宝石补丁。请在此处查看http://timelessrepo.com/refinements-in-ruby
这个链接也分享了猴子补丁和改进的力量。