sql >> Database teknologi >  >> RDS >> Mysql

Rails:Tving tom streng til NULL i databasen

Ja, den eneste mulighed i øjeblikket er at bruge et tilbagekald.

before_save :normalize_blank_values

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

Du kan konvertere koden til en mixin for nemt at inkludere den i flere modeller.

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

Eller du kan definere det i ActiveRecord::Base for at have det i alle dine modeller.

Endelig kan du også inkludere det i ActiveRecord::Base, men aktivere det, når det er nødvendigt.

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. Kør batchfil med psql-kommando uden adgangskode

  2. Mysql:udfør kommando nægtet bruger ''@'localhost' på grund af rutinefejl

  3. En datamodel for handel med aktier, fonde og kryptovalutaer

  4. REGEXP_INSTR() Funktion i Oracle