我正在使用 Rails 开发 mongoDB。所以使用 gem mongoid,任何人都知道如何验证模型中的哈希字段?
问问题
1018 次
2 回答
0
我们必须编写自定义验证方法
于 2013-05-07T08:37:32.110 回答
0
为了寻找解决方案,我找到了一个对我来说很好的自定义验证器,它可以通用。
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
于 2014-06-13T08:36:25.770 回答