我有一个相当独特的类,它允许其子类声明虚拟字段。子类可以通过调用父类的方法来声明存储为 XML 的虚拟字段,如下所示:
class Child1 < Parent
create_xml_field ["readings", "usage"]
end
我设法通过一个讨厌的工作让它工作。create_xml_field方法将字段名称存储在 Class 变量中(见下文)。从after_initialize方法内部调用init_xml_fields方法。
class Parent < ActiveRecord::Base
def self.create_xml_field(fields)
@@xml_fields[self.name] = fields
end
def init_xml_fields(xml_fields)
xml_fields.each do |f|
f=f.to_sym
self.class_eval do
define_method(f) { ... } # define getter
define_method(f) { ... } # define setter
attr_accessible(f) # add to mass assign OK list, does not seem to work!
end
end
end
protected
def after_initialize
init_xml_fields
end
end
够恶心吧?我并不自豪,但我很难让它发挥作用。此外,解决方法不适用于表单参数的大规模分配。
有没有人有经验动态调用 attr_accessible 以允许在子类中进行大规模分配?先感谢您!
为了清楚起见,对这篇文章进行了编辑!