検証したいフィールドがあります。フィールドを空白のままにしたいのですが、ユーザーがデータを入力している場合は、特定の形式にする必要があります。現在、モデルでは以下の検証を使用していますが、これによりユーザーは空白のままにできません。
validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5
目標を達成するためにこれをどのように書くのですか?
次のようなものが必要になると思います。
validates_length_of :foo, minimum: 5, maximum: 5, allow_blank: true
次の形式も使用できます。
validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true
または、最小値と最大値が同じであるため、以下も機能します。
validates :foo, length: {is: 5}, allow_blank: true
validates_length_of documentation から:
validates_length_of :phone, :in => 7..32, :allow_blank => true
:allow_blank
-属性は空白にすることができます。検証をスキップします。
または、より簡潔な(新しいハッシュ構文を使用)、 ドキュメントの検証 から:
validates :foo, length: 5..5, allow_blank: true
上限は、おそらく「in:5..20」のようなより意味のある何かを表す必要がありますが、手紙への質問に答えるだけです。
すべてのvalidates_ *は:ifまたは:ununオプションを受け入れます
validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition
ここで、validate_foo_conditionはtrueまたはfalseを返すメソッドです
procオブジェクトを渡すこともできます。
validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}
validates_length_of :reason, minimum: 3, maximum: 30
同じためのrspecは
it { should validate_length_of(:reason).is_at_least(3).is_at_most(30) }
どのようにそのことについて: validates_length_of :foo, is: 3, allow_blank: true
モデルを追加します。
validates :color, length: { is: 7 }
色は文字列です:
t.string :color, null: false, default: '#0093FF', limit: 7