技術的に null になる可能性がある 2 つのフィールドがあるモデルがあります。フィールド名は:is_activated
と:activated_at
です。がに設定されている:activated_at
場合にのみ必要です。の場合は存在する必要はありません。Railsでこの検証をActiveRecordに直接設定する適切な方法は何ですか?:is_activated
true
:is_activated
false
14767 次
3 に答える
40
バリデーターでProcを使用できます:activated_at
。
validates :activated_at, :presence, if: Proc.new { |a| a.is_activated? }
推奨読書:
- http://guides.rubyonrails.org/active_record_validations.html#using-a-proc-with-if-and-unless
- http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html
最後に、:is_activated
単純に名前を変更することを検討する必要があります:activated
。これは、Rails でのより良い方法と考えられています。is_
メソッド名が文字をサポートしていないため、プレフィックスはブール属性の他の言語で使用されます?
。Ruby はそうしますし、Rails は___?
ブール属性のメソッドを生成します。このため、単に属性:activated
を呼び出して で確認する方がよいでしょうactivated?
。
于 2012-12-06T18:52:41.260 に答える
1
次のようなことができます。
validates :activated_at, presence: true, if: :is_activated?
def is_activated?
self.is_activated
end
:activated_at
これは、メソッドが をis_activated?
返す場合にのみ検証されますtrue
。
于 2012-12-06T18:53:02.677 に答える