技術的に null になる可能性がある 2 つのフィールドがあるモデルがあります。フィールド名は:is_activatedと:activated_atです。がに設定されている:activated_at場合にのみ必要です。の場合は存在する必要はありません。Railsでこの検証をActiveRecordに直接設定する適切な方法は何ですか?:is_activatedtrue:is_activatedfalse
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 に答える