Ruby on rails 使用mongoid验证哈希字段

Ruby on rails 使用mongoid验证哈希字段,ruby-on-rails,validation,hash,mongoid,Ruby On Rails,Validation,Hash,Mongoid,我正在使用Rails开发mongoDB。所以使用gem mongoid,有人知道如何验证模型中的散列字段吗 我们必须编写自定义验证方法 为了寻找解决方案,我找到了一个对我来说很好的自定义验证器,它可以通用 private def fix_content(input_hash, valid_fields) temphash = {} input_hash.each do |k,v| k=k.to_sym if valid_fields.has_key

我正在使用Rails开发mongoDB。所以使用gem mongoid,有人知道如何验证模型中的散列字段吗

我们必须编写自定义验证方法


为了寻找解决方案,我找到了一个对我来说很好的自定义验证器,它可以通用

private
def fix_content(input_hash, valid_fields)
    temphash = {}
    input_hash.each do |k,v|
        k=k.to_sym
        if valid_fields.has_key? k
            case valid_fields[k]
                when 'integer'
                    v=v.to_i
                when 'boolean'
                    v=(v=='true' || v==true)
                when 'float'
                    v=v.to_f
                when 'array'
                    v = "#{v.class}"=="Array" ? v : []
                else
                    v=v.to_s
            end
            temphash[k]=v
        end
    end
    temphash
end
假设我们有这个字段:

field :fieldname, type: Hash, default: {hfield1: 0, hfield2: [], hfield3: false}
实际上,它不是验证器,而是回调。它的工作原理如下:

before_save :fieldname_fix_content
private
下:

def fieldname_fix_content
    # we show the callback what fields will be processed. All others will be disposed of
    self.fieldname = fix_content(self.fieldname, {:hfield1=> 'integer', :hfield2=>'array', :hfield3=>'boolean'})
end

这里的真实答案:@apheading:事实上,我以前浏览过这个链接,知道唯一的方法是自定义验证。无论如何,谢谢你的回复。这就是答案,是的:)