ruby-on-rails - 用户在 Rails 中指定的动态模型字段

标签 ruby-on-rails activerecord

有谁知道 gem 或允许用户向模型添加字段的良好实现?

前任。

用户想要向联系人模型添加“内部注释”字段。在界面中,他们只需选择“新字段”>“类型:文本”

谢谢

最佳答案

对不起,我不知道有什么插件可以做到这一点。但我有一个实现建议。

这个想法是添加一个“DynamicField”模型,这将是与 Contact 模型的 has_many 关系。
如果 Contact 模型中缺少某个方法,则检查是否有动态字段来检索它(如果是这种情况)。

class DynamicField < ActiveRecord::Base
    belongs_to :contact
end


class Contact < ActiveRecord::Base
    has_many :dynamic_fields

    def method_missing(sym, *args, &block)
        begin
            super
        rescue
            field = dynamic_fields.find_by_name(sym)
        end
        raise ActiveRecord::NoMethodError if field.nil?
        field.value
    end
end

如果要使用 attribute= 方法添加虚拟属性,则需要添加正则表达式(检测“=”的存在并进行更新而不是仅获取值)。
但是你已经有了这个想法。

当该方法不存在时,我们检查动态字段是否存在同名的字段。
如果没有 (field.nil?),我们会引发 NoMethodError。否则,我们将其退回。

因此,您可以使用以下内容获取所有字段的列表:
Contact.find(:first).dynamic_fields

并使用以下内容检索特定的:
Contact.find(:first).my_dynamic_field

关于ruby-on-rails - 用户在 Rails 中指定的动态模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582680/

相关文章:

mysql - 用户实体/表 - 对这种关系建模

css - Rails Haml 元素样式

ruby-on-rails - Rails 使用变量名作为 json 数组的键

ruby-on-rails - rails : Find what is the Oldest Item in a Table

mysql - ActiveRecord MySQL 和联接

ruby-on-rails - 编写具有字符串条件数组的 ActiveRecord 查询

ruby-on-rails - 如何编写 Devise 扩展(使用自定义数据存储)

ruby-on-rails - Rails 并发请求

ruby-on-rails - ActiveRecord:find_by 忽略自定义 getter

ruby-on-rails - rails : how to make class method scope to handle nil arguments