所以我知道 hstore 只在字符串中存储键,尤其是值。我正在寻找一种方法来设置他们的数据类型。rails 或 hstore 有办法做到这一点吗?
到目前为止,我所做的是覆盖 getter 并取决于我想要的数据类型。这是我到目前为止所拥有的:
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
因为他们是吸气剂。我认为它们也被用于验证器和其他一些地方。但我真的不确定这样的东西是否已经存在,或者是否有更好的方法来实现它。
干杯!