2017-07-30 7 views
0

私は、これらのフィールドで構成されるこのクラスProfitLossを持っています。私はzero_if_blankbefore_validationと呼んでいます。before_saveは機能しません。空白の値には0を代入し、フォームからはIntegerを割り当てます。 Mysql columns_hashのようにたくさん検索しましたが、mongoの各フィールドのタイプを指定する方法が見つかりませんMongoid Rails - 保存する前にフィールドのデータ型をチェックする方法はありますか?

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 
+0

あなたは 'フィールドを試してみました:other_incomes、種類:整数、デフォルト:0 'を? –

+0

@SergioTulentsev私はそれを使用しましたが、フォーム入力では、すべての整数フィールドに0を表示するので、使用したくありません。 – Rishabh

+0

@SergioTulentsevが指摘しているように、フィールドに[defaults](https://docs.mongodb.com/mongoid/master/tutorials/mongoid-documents/#defaults)を設定できるはずです。マニュアルで指摘されているように、「何も提供されなければ、Mongoidのフィールドには常にデフォルト値があると言うことができます。動作が異なる場合は、フォームとその戻り値を確認する必要があります。 –

答えて

0

コードのこの作品は、仕事をした:)

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 
関連する問題