繁体   English   中英

精炼或猴子跳线4

[英]Rifinements or monkey patching rails 4

我正在使用rail4和ruby 2.0,我想在ActiveModel :: Errors中添加方法“ first_error” ,该方法应该在整个应用程序中都可用,因此遇到了以下两种可能性:

  • 猴子补丁
  • 细化

仅通过创建初始化程序“ 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

我得到错误的未定义方法'using'

现在我的问题是:

目前实施哪种最佳方法
通常不建议使用Monkey Patching,而完善是ruby 2.0的实验功能

还想知道如何在rails4中使用改进来实现此目标吗?

如果在这种情况下还有其他方法可以遵循,请同时提及。

如果您使用的是ruby 2.0,则需要使用支持完善功能的ruby补丁。在此处查看http://timelessrepo.com/refinements-in-ruby
此链接还共享猴子修补和优化的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM