我正在使用一个有点设计怪癖的遗留数据库。有一列设置为NOT NULL
但默认值为“”(空字符串)。尝试保存到此列时,这会导致我出现问题。 Rails会自动将任何空的属性转为nil。
my_class = MyClass.new
my_class.variable = ''
这将评估为nil,我理解Rails约定是发送nil,这是有道理的,但在这种情况下我必须发送空字符串以保证数据完整性。如何强制ActiveRecord实际将空字符串保存到数据库?
编辑:
# Console
1.9.3-p484 :002 > my_class = TestClass.new
=> nil
1.9.3-p484 :003 > my_class.name = 'hello'
=> "hello"
1.9.3-p484 :004 > my_class.name
=> "hello"
1.9.3-p484 :005 > my_class.name = ''
=> ""
1.9.3-p484 :006 > my_class.name
=> nil
即使我将其设置为空字符串,属性的getter也将始终返回nil。
答案 0 :(得分:2)
该列的数据类型是什么?如果它是字符串,那么它应该让你保存空字符串。如果是(例如)整数,则将“”保存为“null”。
答案 1 :(得分:0)
使用before_save
回调将nil
替换为''
。