12

フィールドへの入力をnilに制限するか、指定された値の配列内に収まるように制限したいモデルがあります。インクルージョン部分を機能させることはできますが、allow_nil: trueビットが機能していないようです。

class Mock::Patient < ActiveRecord::Base
  LANGUAGE_OPTIONS = %w[English Spanish French German Chinese Hindi Punjabi]
  validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS }
end

その最後の行を次のように変更してみました。

  validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS }, allow_nil: true

しかし、役に立たない。単純な包含またはnilのこの組み合わせを表現する最も簡単な方法は何ですか?

4

2 に答える 2

12

限られた値の配列を許可しながらnilが検証できるようにする正しい形式は、次のとおりです。

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS, allow_nil: true }

allow_nilオプションが包含オプションハッシュ内にどのように含まれているかに注意してください

于 2013-02-15T17:03:29.273 に答える
0

検証行を次のようにすることで、これを解決しました。

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS + [nil] }

このように、nilを許可しますが、選択オプションのコレクションをフィードするためにビューで使用する定数は変更しません。それ以来、配列の前に要素''を追加したので、フォーム入力ヘルパーに明示的に空白を含める必要はありません。

于 2012-11-27T18:16:38.193 に答える