对于模型中存在的每个属性,有一个gem可以自动为您执行此操作:
将此添加到您的Gemfile
并运行bundle install
:
gem 'nilly_vanilly'
此 gem 会将任何空字符串转换为 NIL 值以存储到您的数据库中。
====== 更新 =====
我刚刚尝试了这个 Gem,但它不起作用。我报了,开发者说postgreSQL不兼容。他正在修补宝石。目前,我最终创建了自己的库。
只需创建包含以下行的文件lib/my_model_tools.rb :
module MyModelTools
private
def blank_string_attributes_to_nil
self.attributes.each do |attr_name, attr_value|
self.send("#{attr_name}=", nil) if attr_value.kind_of?(String) && attr_value == ''
end
end
end
然后您必须将这些行添加到您的每个 app/models/*文件中:
require Rails.root.to_s + '/lib/my_model_tools.rb'
class MyExampleModel < ActiveRecord::Base
include MyModelTools
before_validation :blank_string_attributes_to_nil
...
end
这会将任何空字符串属性转换为 NIL 值以存储到您的数据库中(对于您复制上述行的模型)。
因此,当它们为空字符串时,您不必手动将每个属性分配给 NIL。