Rails collection_select:选中“blank”选项时保存null而不是空字符串

我在表单中有一个选择框的代码如下:

它显示以下选择选项:

选择选项

我注意到当选择blank选项时,实际保存在数据库中的是一个空字符串: ''

选择blank选项时,我不想保存空字符串。 相反:我想保存null

我试图覆盖rails模型中的setter,但它不起作用:

 def text_value=(value) write_attribute(:name, nil) and return if value.empty? super end 

我如何在应用程序级别执行此操作? 我知道我可以在数据库级别指定一个默认值,但似乎这可能更适合在应用程序级别。

这有效:

 def text_value=(value) if value.empty? write_attribute(:name, nil) else super end end 

如果你想为多个属性和/或模型做这个,那就有一个gem: https : //github.com/rubiety/nilify_blanks