所以我知道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
因为他们是吸气剂。我认为它们也被用于验证器和其他一些地方。但我真的不确定这样的事情是否已经存在,或者是否有更好的方法来实现这一点。
干杯!