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



我有这个类ProfitLoss,它由这些字段组成。我想在before_validationzero_if_blank调用此方法,因为before_save不起作用,我想做的是将 0 分配给那些空白且来自表单时Integer的值。我搜索了很多像 Mysqlcolumns_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

最新更新