【发布时间】:2013-03-11 14:38:01
【问题描述】:
我有一个模型,它在数据库中有一个实际列。此列存储为 JSON 配置字符串。我使用了一堆我想在这个配置 JSON 属性中映射的虚拟属性。我基本上不想在数据库中创建一堆列,而是使用这个 JSON 属性来包含所有内容。有没有比下面的defs 更清洁的方法来实现这一点?
class Device < ActiveRecord::Base
attr_accessible :configuration
serialize :configuration, JSON
attr_accessor :background_color, :title
# below is ew
def background_color; self.configuration["background_color"]; end
def background_color=(value); self.configuration["background_color"] = value; end
def title; self.configuration["title"]; end
def title=(value); self.configuration["title"] = value; end
end
理想情况下,我会寻找attr_maps_to_hash :configuration, [:background_color, :title] 之类的东西。有这样的东西吗?
【问题讨论】:
-
我想出的另一个解决方法是在属性符号数组上使用
class_eval来生成 getter 和 setter,但这也有点难看。
标签: ruby-on-rails activerecord