关于上一个问题,我正在寻找一种方法 动态地模仿我的模特。
Advice on "Dynamic" Model validation
我工作的解决方案是:
def after_initialize
singleton = class << self; self; end
validations = eval(calendar.cofig)
validations.each do |val|
singleton.class_eval(val)
end
end
在我的实际应用中,我有2个型号
class Calendar < ActiveRecord::Base
has_many :events
end
class Event < ActiveRecord::Base
belongs_to :calendar
def after_initialize
singleton = class << self; self; end
validations = eval(calendar.cofig)
validations.each do |val|
singleton.class_eval(val)
end
end
end
如您所见,应添加到Event类的验证代码位于Calendar字段“config”上。
适用于现有事件,但不适用于新记录。那是因为,在调用after_initialize时,关联还不存在。
除了将配置值放在Event本身之外,我找不到办法。
有任何建议吗?
韩国社交协会!
答案 0 :(得分:0)
您可能希望在验证阶段运行验证代码,而不是初始化阶段。试试这个:
class Calendar < ActiveRecord::Base
has_many :events
end
class Event < ActiveRecord::Base
belongs_to :calendar
validate do |event|
validations = eval(calendar.cofig)
validations.each do |val|
eval(val)
end
end
end