1

所以我知道 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

因为他们是吸气剂。我认为它们也被用于验证器和其他一些地方。但我真的不确定这样的东西是否已经存在,或者是否有更好的方法来实现它。

干杯!

4

1 回答 1

1

你可以试试hstore_accessor gem

于 2014-01-23T10:29:49.563 回答