是否有一种简单的方法(比如配置)可以强制ActiveRecord将空字符串保存为数据库中的NULL(如果列允许)?
原因是,如果您在没有默认值的可空字符型列中使用新记录并且不设置该值,则该列将包含NULL。但是,如果设置该值为空字符串,则该列将不会为空,这将导致数据库中的不一致性,而我想避免这种情况。
目前,我在我的模型中做类似于以下的事情:
before_save :set_nil
def set_nil
[:foo, :bar].each do |att|
self[att] = nil if self[att].blank?
end
end
这个代码可以工作,但是不够高效也不符合DRY原则。我可以将其分解成一个方法并将其混合到ActiveRecord中,但在采取这种方法之前,我想知道是否已经有现成的方法可以完成这个任务。
false.present? == false
,false.to_s.present? == true
。这对于模型字段非常重要,默认情况下应该是布尔值(例如false)。 - serghei.presence
方法来替代写成self[column].present? || self[column] = nil
的方式,如下所示:self[column] = self[column].presence
。 - Cruz Nunez