sql >> Databasteknik >  >> RDS >> Mysql

Rails:Tvinga tom sträng till NULL i databasen

Ja, det enda alternativet för tillfället är att använda en återuppringning.

before_save :normalize_blank_values

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

Du kan konvertera koden till en mixin för att enkelt inkludera den i flera 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 så kan du definiera det i ActiveRecord::Base för att ha det i alla dina modeller.

Slutligen kan du också inkludera det i ActiveRecord::Base men aktivera det när det behövs.

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-underfrågan resulterar i where-klausul

  2. listview visa data från databasen i Android

  3. Databasarkitektur för miljontals nya rader per dag

  4. Symfony2 Doctrine PDO MySQL-anslutning med LOAD DATA LOCAL INFILE