在Rails中将空字符串保存到数据库

时间:2014-02-04 14:12:05

标签: ruby-on-rails activerecord

我正在使用一个有点设计怪癖的遗留数据库。有一列设置为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。

2 个答案:

答案 0 :(得分:2)

该列的数据类型是什么?如果它是字符串,那么它应该让你保存空字符串。如果是(例如)整数,则将“”保存为“null”。

答案 1 :(得分:0)

使用before_save回调将nil替换为''