sql >> Database >  >> RDS >> Mysql

Rails:Forceer lege string naar NULL in de database

Ja, op dit moment is de enige optie om terug te bellen.

before_save :normalize_blank_values

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

Je kunt de code omzetten in een mixin om deze gemakkelijk in verschillende modellen op te nemen.

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

Of u kunt het definiëren in ActiveRecord::Base om het in al uw modellen te hebben.

Ten slotte kunt u het ook in ActiveRecord::Base opnemen, maar indien nodig inschakelen.

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. MySQL-concepten:sessie versus verbinding

  2. JPA TemporalType.Date geeft verkeerde datum op

  3. MySQL UPDATE met IF-voorwaarde

  4. Waarom zijn de mysql_-functies van PHP verouderd?