Rails collection_select:当'空白'时保存null而不是空字符串。选择的选项

时间:2016-11-02 18:27:37

标签: ruby-on-rails ruby

对于表单中的选择框,我有以下代码:

<div class="field">
  <%= f.label :user_id %>
  <%= f.collection_select :user_id, User.all, :id, :name, include_blank: true %>
</div>

它显示以下选择选项:

select options

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

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

我尝试覆盖导轨模型中的setter,但它没有工作:

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

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

2 个答案:

答案 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