Mongoid Rails - 有没有办法在保存前检查字段的数据类型?

Mongoid Rails - Is there a way to check the field's datatype before saving?

我有这个 class ProfitLoss,其中包含这些字段。我想在 before_validation 上调用此方法 zero_if_blank,因为 before_save 不起作用,我想做的是将 0 分配给那些空白的值并且 Integer 当来自表格。 我搜索了很多类似 Mysql columns_hash 但没有找到任何方法来给出 mongo 中每个字段的类型。

class ProfitLoss < Generic
  include Mongoid::Document
  include Mongoid::Timestamps
  include MongoMysqlRelations

  field :fiscal_year, type: String
  field :sales_excluding_other_incomes, type: Integer
  field :other_incomes, type: Integer
  field :closing_stock, type: Integer

  before_validation :zero_if_blank

  def zero_if_blank
    pp self.columns_hash.each {|k,v| puts "#{k} => #{v.type}"}
  end
end

这段代码完成了工作:)

def zero_if_blank 
  self.fields.each do |k,v|
   if v.type == Integer && self.attributes[k] == nil
     self.__send__("#{k}=", 0)
   end
  end
end