2013-10-22 40 views
1

所以我知道hstore只存儲在字符串中的任何一個鍵和特別是值。我正在尋找一種方法來設置他們的數據類型。在rails或hstore中有沒有辦法做到這一點?Rails 4 hstore定義數據類型

到目前爲止,我所做的是重寫getters並取決於我想要的數據類型。這是我迄今爲止:

class ModelWithHstore < ActiveRecord::Base 
    store_accessor :properties, :some_boolean_field, :some_integer_field, :some_datetime_field 

    validate :validate_range 

    def some_boolean_field 
    return if self[:properties].nil? || self[:properties][__method__.to_s].nil? 

    if [true, 'true', '1'].include? self[:properties][__method__.to_s] 
     return true 
    elsif [false, 'false', '0'].include? self[:properties][__method__.to_s] 
     return false 
    end 

    self[:properties][__method__.to_s] 
    end 

    def some_integer_field 
    return if self[:properties].nil? || self[:properties][__method__.to_s].nil? 

    self[:properties][__method__.to_s].to_i 
    end 

    def some_datetime_field 
    return if self[:properties].nil? || self[:properties][__method__.to_s].nil? 

    DateTime.strptime(self[:properties][__method__.to_s].to_s, '%F %T') 
    end 

    private 

    def validate_range 
    errors.add(:some_integer_field, "value out of range") if !some_integer_field.between?(10, 90) 
    end 
end 

而且因爲他們是獲得者。我認爲他們也被用在驗證者和其他地方。但我真的不確定這樣的事情是否已經存在,或者是否有更好的實現方法。

乾杯!

回答