假设我在HR系统中有两个模型,Person和Field。我想允许系统用户通过为其创建字段来向Person模型添加自定义属性。所以我的Person模型将包含类似
的行class Person < ActiveRecord::Base
store :fields, accessors: Field.all.pluck(:name), coder: JSON
end
但是这不起作用,因为该类被缓存了,因此也没有添加新的字段。通常,我希望使用Proc或lambda,但在这里不起作用。
是否有一个不依赖于添加宝石的简单解决方案?是否可以在不使用ActiveRecord Store和序列化列的情况下执行此操作,但是保留了执行验证和跟踪属性更改的功能?
答案 0 :(得分:2)
尝试一下
class Person < ActiveRecord::Base
store :fields, coder: JSON
after_initialize :add_accessors_for_field_names
def add_accessors_for_field_names
field_names.each do |field_name|
singleton_class.class_eval do
store_accessor :fields, field_name
end
end
end
def field_names
Field.all.pluck(:name)
end
end