将验证添加到外部Gem的activerecord模型的最佳方法是什么?
module Library
class Model < ActiveRecord::Base
validates :field_active, inclusion: { in: [true, false] }
end
end
我想在其中添加另一个validates
,例如
validates :me_too, presence: true
但由于它是外部宝石,所以不可能只在validates :field_active
下面添加它。
我想知道这样做的最佳做法是什么。
class_eval
是最好的方式还是不赞成的?
答案 0 :(得分:1)
Ruby拥有所谓的“开放课程”。您可以打开任何类(在任何时候)并添加更多方法。这应该有效:
module Library
class Model
validates :me_too, presence: true
end
end
它打开已经定义的Library::Model
,只是添加了一行代码到那里(不替换/删除现有代码)。
请注意,这取决于Library::Model
已经已加载(这不能保证)。这应该是一个更安全的选择:
Library::Model.instance_eval do
validates :me_too, presence: true
end
如果Library::Model
尚未加载,它将触发 for (i, point) in allPoints.enumerated() {
let nextPoint = i == allPoints.count - 1 ? allPoints[0] : allPoints[i+1]
signedArea += (point.x * nextPoint.y - nextPoint.x * point.y)
}
let clockwise = signedArea < 0
的加载。