Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dpkg:пакет за обработка на грешка mysql-server (проблеми със зависимостта)?

  2. Грешка в C# MySQL SSL връзката при опит за използване на conn.Open()

  3. как да създадете mysql схема в nodejs

  4. Как мога да филтрирам заявка по часовата част на поле DateTime в MySQL?

  5. MySQL - стойност по подразбиране за TIMESTAMP(3)