Có, lựa chọn duy nhất vào lúc này là sử dụng một cuộc gọi lại.
before_save :normalize_blank_values
def normalize_blank_values
attributes.each do |column, value|
self[column].present? || self[column] = nil
end
end
Bạn có thể chuyển đổi mã thành một mixin để dễ dàng đưa nó vào một số mô hình.
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
Hoặc bạn có thể xác định nó trong ActiveRecord ::Base để có nó trong tất cả các mô hình của bạn.
Cuối cùng, bạn cũng có thể đưa nó vào ActiveRecord ::Base nhưng hãy bật nó khi cần thiết.
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