对于表单中的选择框,我有以下代码:
<div class="field">
<%= f.label :user_id %>
<%= f.collection_select :user_id, User.all, :id, :name, include_blank: true %>
</div>
它显示以下选择选项:
我注意到,当选择blank
选项时,实际保存在数据库中的是一个空字符串:''
选择blank
选项时,我不想保存空字符串。相反:我想保存null
。
我尝试覆盖导轨模型中的setter,但它没有工作:
def text_value=(value)
write_attribute(:name, nil) and return if value.empty?
super
end
我如何在应用程序级别执行此操作?我知道我可能在数据库级别指定了默认值,但似乎这可能更适合应用程序级别。
答案 0 :(得分:2)
这有效:
def text_value=(value)
if value.empty?
write_attribute(:name, nil)
else
super
end
end
答案 1 :(得分:1)
如果你想为多个属性和/或模型做这件事,那就有一个宝石: https://github.com/rubiety/nilify_blanks