sql >> データベース >  >> RDS >> Mysql

Rails:データベースで空の文字列を強制的にNULLにする

    はい、現時点での唯一のオプションはコールバックを使用することです。

    before_save :normalize_blank_values
    
    def normalize_blank_values
      attributes.each do |column, value|
        self[column].present? || self[column] = nil
      end
    end
    

    コードをミックスインに変換して、複数のモデルに簡単に含めることができます。

    module NormalizeBlankValues
      extend ActiveSupport::Concern
    
      included do
        before_save :normalize_blank_values
      end
    
      def normalize_blank_values
        attributes.each do |column, value|
          self[column].present? || self[column] = nil
        end
      end
    
    end
    
    class User
      include NormalizeBlankValues
    end
    

    または、ActiveRecord ::Baseで定義して、すべてのモデルに含めることができます。

    最後に、ActiveRecord ::Baseに含めることもできますが、必要に応じて有効にします。

    module NormalizeBlankValues
      extend ActiveSupport::Concern
    
      def normalize_blank_values
        attributes.each do |column, value|
          self[column].present? || self[column] = nil
        end
      end
    
      module ClassMethods
        def normalize_blank_values
          before_save :normalize_blank_values
        end
      end
    
    end
    
    ActiveRecord::Base.send(:include, NormalizeBlankValues)
    
    class User
    end
    
    class Post
      normalize_blank_values
    
      # ...
    end
    


    1. DockerMYSQL'[2002]接続が拒否されました'

    2. MYSQLifステートメントの質問

    3. sqlplusでエラーを表示する方法

    4. SQL Serverでリンクサーバーから主キーを返す(T-SQLの例)