gpt4 book ai didi

ruby-on-rails - rails text_field/text_ara 空字符串与 nil

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:32 24 4
gpt4 key购买 nike

我什至不确定我是否有问题,但我只是不喜欢我的 text_fields 和 text_areas 在数据库中保存为 empty string而不是 nil .

我正在玩空对象模式,我刚刚意识到如果我创建一个配置文件但不填写位置字段然后调用 <%= @user.profile.location.upcase %>然后它不会爆炸,因为 location 是一个字符串,即使它是空的。

这是 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' %>
......

最佳答案

最简单的解决方法是使用此处的“strip_attributes”之类的 gem:https://github.com/rmm5t/strip_attributes

可以通过在您的模型中添加一个 before_save 回调来完成自定义解决方法,该回调采用任何空白值并将它们设置回 nil。

例如在您的模型中:

before_save :my_nil_maker_method_lol

[...]

def my_nil_maker_method_lol
if self.whatever_attribute.blank?
self.whatever_attribute=nil
end
end

更新:

防止空白字段被保存可以通过多种方式完成,例如上面描述的,甚至在它们到达数据库之前删除 Controller 中的空白参数。

在维护数据库完整性时,Rails 的方法是始终将此逻辑保留在您的模型中。它使维护变得更加容易,并减少了出现意外的空间,例如如果您要在其他地方修改传入参数。

至于它应该如何在模型中完成,实际上只是您作为开发人员期望获得的输入的问题。您可以添加一个如上所示的回调来维护您认为合适的数据库,或者您可以添加一个 validates_presence_of 验证,如果该字段留空,它将向用户返回一个错误。

如果您问是否应该完全避免将空字符串插入数据库,这实际上取决于您作为开发人员,因为在某些情况下您可能需要该信息,但在这种情况下听起来就好像您要限制空字符串一样。

关于ruby-on-rails - rails text_field/text_ara 空字符串与 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37209611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com