17

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

4

3 に答える 3

40

バリデーターでProcを使用できます:activated_at

validates :activated_at, :presence, if: Proc.new { |a| a.is_activated? }

推奨読書:


最後に、: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 に答える