ruby-on-rails - ActiveRecord::Store 带有取自另一个表的字段名
问题描述
假设我在 HR 系统中有两个模型,Person 和 Field。我想允许系统用户通过为其创建一个字段来向 Person 模型添加自定义属性。所以我的 Person 模型将包含类似的行
class Person < ActiveRecord::Base
store :fields, accessors: Field.all.pluck(:name), coder: JSON
end
然而这不起作用,因为该类被缓存并且因此没有添加新字段。通常我会考虑使用 Proc 或 lambda,但这在这里行不通。
是否有一个不依赖于添加 gem 的简单解决方案来解决这个问题?我可以在不使用 ActiveRecord 存储和序列化列的情况下执行此操作,但我可以保留进行验证和跟踪属性更改的能力吗?
解决方案
试试这个
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
推荐阅读
- php - 如何在 curl PHP 中假装是一个网站?
- java - 从响应中获取对象列表
- python - 在python中使用循环求和
- reactjs - 尝试在成功注册时重定向
- html - 添加 CSS 属性后,水平规则不显示
- javascript - 如果第一个不起作用,则使用 axios 提出新请求
- c# - 如何将控制台构建添加到 C# Windows 服务应用程序并显示控制台?
- angular - 带有行单击和操作按钮的角度材料表作为单独的操作
- reporting-services - SSRS 报告中损坏的图像框
- labview - myRIO 模块 - 对 FPGA 串行闪存进行编程与仅对 FPGA 进行编程