有一個gem能自動爲您的模型中現有的每個屬性執行此操作:
添加到您的Gemfile
和運行bundle install
:
gem 'nilly_vanilly'
這種寶石將任何空字符串轉換成NIL值是儲存到你的數據庫。
====== UPDATE =====
我只是嘗試這種寶石,它是行不通的。我報告了這個問題,開發者說它和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
然後,你必須添加這些行到每個應用程序/模型/ *文件:
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。
謝謝shweta ...它的工作...很好.. – Vinay
嗨...謝謝...和一個懷疑...你會解釋我爲什麼我們使用雙重問號後空白?對於軌道上的紅寶石來說,這是非常新穎的。 – Vinay
方法名是'blank?',所以這是一個問號,另一個是由於[三運算符](http://en.wikipedia.org/wiki/%3F :#Ruby)(或'內嵌if語句') – Veger