オンRails 5。
Order
属性を持つdescription
モデルがあります。次の2つの条件のいずれかが満たされている場合にのみ、その存在を検証します。現在のステップが最初のステップに等しい場合OR require_validationがtrueに等しい場合。
次のような1つの条件に基づいて簡単に検証できます。
validates :description, presence: true, if: :first_step?
def first_step?
current_step == steps.first
end
しかし、別の条件を追加し、どちらかが真であるかどうかを検証する方法についてはわかりません。
何かのようなもの:
validates :description, presence: true, if: :first_step? || :require_validation
ありがとう!
if:
句にラムダを使用して、or条件を実行できます。
validates :description, presence: true, if: -> {current_step == steps.first || require_validation}
1つの方法でそれをラップできますか? docs
:if-検証を行うかどうかを決定するために呼び出すメソッド、プロシージャ、または文字列を指定します(例:if :: allow_validation、またはif:Proc.new {| user | user.signup_step> 2})。メソッド、プロシージャ、または文字列は、trueまたはfalseの値を返すか評価する必要があります。
validates :description, presence: true, if: :some_validation_check
def some_validation_check
first_step? || require_validation
end
if
条件として評価されるラムダを渡すことができます。
試してください:
validates :description, presence: true, if: -> { first_step? || require_validation }
Jaredが言うように1つのメソッドを追加したくない場合は、lambdaを使用してみてください
validates :description, presence: true, if: ->{ first_step? || require_validation }