【发布时间】:2015-02-24 11:10:26
【问题描述】:
我正在使用 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
我得到错误未定义的方法'使用'。
现在我的问题是:
目前最好的实施方法是什么?
Monkey Patching 一般不推荐,细化是ruby 2.0的实验特性
还想知道如何使用 rails4 中的改进来实现这一点?
如果在这种情况下应该遵循任何其他方法,请同时提及。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 ruby-2.0