Rails 4 hstore定义数据类型

时间:2013-10-22 06:15:50

标签: ruby-on-rails ruby-on-rails-4 psql hstore

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

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

干杯!

1 个答案:

答案 0 :(得分:1)

您可以尝试hstore_accessor gem