2010-01-29 62 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

相關問題