Ya, satu-satunya pilihan saat ini adalah menggunakan panggilan balik.
before_save :normalize_blank_values
def normalize_blank_values
attributes.each do |column, value|
self[column].present? || self[column] = nil
end
end
Anda dapat mengonversi kode menjadi mixin agar mudah dimasukkan ke dalam beberapa model.
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
Atau Anda dapat mendefinisikannya di ActiveRecord::Base untuk memilikinya di semua model Anda.
Terakhir, Anda juga dapat memasukkannya ke dalam ActiveRecord::Base tetapi mengaktifkannya saat diperlukan.
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