2010-01-29 66 views

回答

0

我与偏好相当慵懒并存储数据的序列化JSON或YAML哈希值。工作得很好,通常也保留数据类型。

+0

如何使用无模式数据库呢? 它会表现得更好,并且更容易用JSON哈希查询。 – CodeJoust 2010-01-29 06:11:05

+0

你可以,但是你需要为所有的事情抛弃你的RDBMS,或者一起运行这两者来增加你的成本。将数据库中的字符串拉到反序列化的性能非常好,特别是在使用JSON和JSON gem时。使用像MongoDB这样的数据库,你仍然会有反序列化开销。 – 2010-01-29 23:31:43

0

我用单行表单,每列表示一个首选项。这使得可能有不同的数据类型。

为了能够获取的偏爱,我推翻method_missing能够直接从类名检索喜好值,而不需要一个实例,像这样:

class Setting < ActiveRecord::Base 
    @@instance = self.first 

    def self.instance 
    @@instance 
    end 

    def self.method_missing(method, *args) 
    option = method.to_s 
    if option.include? '=' 
     var_name = option.gsub('=', '') 
     value = args.first 
     @@instance[var_name] = value 
     else 
     @@instance[option] 
    end 
    end 
end 

因此,以检索设置,你可以使用:

a_setting = Setting.column_name 
+0

这没什么,但是如果我想要设置具有名为'data_type'的字段呢?所以设置可以是例如整数,浮点数,布尔值。 – 2010-01-29 08:02:07

+0

@Igor:那没用。通过使用基于列的存储,您可以让数据库定义数据类型,并且不需要为其分配单独的列。您正在考虑每个设置有一行,并且数据类型只有一列。我的例子是单行,每列可以是任何你想要的数据类型。 – JRL 2010-01-29 08:19:51

+0

是的,也许你是对的:) – 2010-01-29 09:45:26

相关问题