ruby-on-rails - Rails-在运行时在ActiveRecord中添加自定义字段

标签 ruby-on-rails activerecord

您知道某些错误跟踪器(和其他软件)如何允许您添加自定义字段吗?

通常,这是通过看起来像这样的数据结构完成的:

  Items
----------
 ID | NAME | ITEM_TYPE_ID


 FieldDefinitions
---------------------------------------
 ID | ITEM_TYPE_ID | FIELD_NAME | FIELD_TYPE

 FieldValues
---------------------------------------
ID | FIELD_ID | ITEM_ID | VALUE

我正在尝试找出在Rails中进行此设计的最佳方法。我想允许扩展简单属性的模型很多。

当我检索Item时,我希望它包含为该模型定义的加法字段值的哈希。

最佳答案

就像是...?

class Item < ActiveRecord::Base
  has_many :field_values
  has_many :field_definitions, :through => :field_values

  def custom_fields_hash
    cfh = {}
    self.field_values.each |fv|
      cfh[fv.field_definition] = fv
    end
    cfh
  end
end

class FieldValue < ActiveRecord::Base
  belongs_to :item
  belongs_to :field_definition
end

class FieldDefinition < ActiveRecord::Base
  has_many :field_values
  has_many :items, :through => field_values
end

或者,您可以更改
cfh[fv.field_definition] = fv

...至...
cfh[fv.field_definition.field_name] = fv.value

关于ruby-on-rails - Rails-在运行时在ActiveRecord中添加自定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200565/

相关文章:

ruby-on-rails - 加速 RSpec 请求规范的方法

ruby-on-rails - 无法验证 https ://rubygems. org/的 SSL 证书

ruby-on-rails - attr_accessible(*attributes) 和 attr_protected(*attributes) 有什么区别?

ruby-on-rails - 在测试模式下没有来自 ActiveRecord 且带有 byebug 的 SQL 日志

ruby-on-rails - ActiveRecord 的实现中有哪些好的或坏的设计决策?

ruby-on-rails - ActiveRecord::InvalidForeignKey 错误

ruby-on-rails - Rails (ActiveRecord) 多对多表

ruby-on-rails - 无法使用 Stripe 保存或取消订阅

ruby-on-rails - Ruby on Rails 中 options.dup 的用途是什么?

css - 我正在关注 Codecademy rails turorial 并坚持使用 bootstrap