我想使用instance_eval来增强现有的类。原始定义包含验证,它要求存在某些字段,例如:
class Dummy < ActiveRecord::Base
validates :field, :presence => true
end现在,我想使用instance_eval (或任何其他方法,实际上)将其更改为optional:
Dummy.instance_eval do
...
end删除验证的正确语法是什么,因此该字段是可选的。我宁愿直接在模型层上做这件事,而不是在控制器或视图中进行奇怪的修改。使用instance_eval并不是必须的,但据我所知,这通常是增强Rails中类的最好方法。
编辑#1
一般来说,原始类是gem的一部分,我不想将其派生出来,也不想将其绑定到特定的发行版。一般的原因并不是很重要。简单地编辑原始模型的后果要比修补猴子严重得多。
发布于 2014-05-26 01:29:44
在Rails 4.1中,
我可以做_validate_callbacks.clear。在我的例子中,我希望删除gem的所有验证,这样我就可以创建自己的验证。我在一个模块中做到了这一点,这个模块被打到了类中。
Module #Name
extend ActiveSupport::Concern
included do
_validate_callbacks.clear
#add your own validations now
end
endhttps://stackoverflow.com/questions/7545938
复制相似问题