0

我正在尝试添加一个 before_validation 钩子来清理多余的空白。作为其中的一部分,我还想将任何空白字符串值设置回零。这样做的原因是为了防止用户在必填字段中输入空格以试图绕过它。

以下是我尝试执行此操作的方法。更改[x][1].strip!行按我的预期工作,并给我一个空白行。但令我惊讶的是,当我尝试设置 changes[x][1] = nil 时,changes[x][1] 的值保持不变。通过一些调试测试,我发现不仅失败了,而且任何将 changes[x][1] 设置为 ANY 值的尝试都无法真正更新数组!

我很想听听我在这里做错了什么,以及如何解决它。非常感谢!

def strip_whitespace
  changes.keys.each do |x|
    if changes[x][1].respond_to?(:strip!)
      changes[x][1] = nil if changes[x][1].blank?
      changes[x][1].strip!
    end
  end
end
4

1 回答 1

0

您不需要进行所有这些检查,.blank?当对象时该方法返回 true:

  • nil
  • 是一个空字符串
  • 是一个只有空格字符的字符串。

:presence验证使用该方法blank?,因此您可以使用该方法来防止在模型的属性中引入空字符串。

编辑:

我尝试复制创建changes哈希的上下文,它工作得很好:

changes = {one: ['q', 'w', 'e'], two: ['a', '', 'd']}

changes.keys.each do |x|
  changes[x][1] = nil if changes[x][1].blank?
end
# => [:one, :two]

changes
# => {:one => ["q", "w", "e"], :two => ["a", nil, "d"]}
于 2013-03-14T17:14:39.013 回答