0

不要な空白をクリーンアップする before_validation フックを追加しようとしています。その一環として、空白の文字列値を nil に戻したいと考えました。これは、ユーザーが必須フィールドをバイパスしようとして空のスペースを入力するのを防ぐためです。

以下は、私がこれをやろうとした方法です。変更点[x][1].strip! 行は期待どおりに機能し、空白行が返されます。私が驚いたのは、changes[x][1] = nil を設定しようとしても、changes[x][1] の値が変わらないことです。いくつかのデバッグ テストを実行すると、それが失敗しただけでなく、changes[x][1] を任意の値に設定しようとしても、実際には配列を更新できないことがわかりました。

ここで何が間違っているのか、どうすれば修正できるのかを知りたいです。本当にありがとう!

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 に答える