【发布时间】:2016-05-13 12:04:24
【问题描述】:
我什至不确定我是否有问题,但我只是不喜欢我的 text_fields 和 text_areas 以empty string 而不是nil 的形式保存在数据库中。
我正在使用空对象模式并且刚刚意识到如果我创建了一个配置文件但不填写位置字段然后调用<%= @user.profile.location.upcase %> 然后它不会爆炸因为位置是一个字符串即使它是空。
这是 Rails 的惯例吗?如果是这样,那为什么?这有点奇怪,因为假设配置文件上有一个 number_of_pets attr 然后我尝试调用类似
<% if user.profile.number_of_pets.odd? %>
<%= @user.profile.first_name %> has odd number of pets
<% end %>
然后它爆炸了,因为我不能打电话给nil.odd?。
和往常一样,所以如果没有填写,它将保存为空字符串
<%= form_for @profile, url: user_profile_path do |f| %>
<%= f.label :city %>
<%= f.text_field :location, class: 'form-control' %>
......
【问题讨论】:
-
你可以为此编写验证
-
Amol,感谢您的回答,但这不是我的问题。我想知道约定是什么以及为什么。
-
这也一直困扰着我。对于更可预测的数据(空白为
NULL),我总是使用nilify_blanksgem。我知道这并不能回答你的问题,但这更像是一种同意。
标签: ruby-on-rails database null null-object-pattern