web-dev-qa-db-ja.com

Rails-検証:1つの条件が真の場合

オン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

ありがとう!

15
Kathan

if:句にラムダを使用して、or条件を実行できます。

validates :description, presence: true, if: -> {current_step == steps.first || require_validation}
28
SteveTurczyn

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
9
jready

if条件として評価されるラムダを渡すことができます。

試してください:

validates :description, presence: true, if: -> { first_step? || require_validation }
2
Malav Bhavsar

Jaredが言うように1つのメソッドを追加したくない場合は、lambdaを使用してみてください

validates :description, presence: true, if: ->{ first_step? || require_validation }
1