モデルに存在するすべての属性に対して自動的にそれを行うことができるgemがあります:
これをに追加してGemfile
実行しますbundle install
:
gem 'nilly_vanilly'
このgemは、空の文字列をNIL値に変換して、DBに保存します。
======更新=====
この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値に変換され、DBに保存されます(上記の行をコピーするモデルの場合)。
したがって、空の文字列の場合、各属性を手動でNILに割り当てる必要はありません。