Rails - 验证:如果一个条件为真

Kat*_*han 17 validation ruby-on-rails ruby-on-rails-4 ruby-on-rails-5

在Rails上5.

我有一个Order带有description属性的模型.如果满足以下两个条件之一,我只想验证它的存在:如果当前步骤等于第一步或者如果require_validation等于true.

我可以根据以下一个条件轻松验证:

validates :description, presence: true, if: :first_step?

def first_step?
 current_step == steps.first
end
Run Code Online (Sandbox Code Playgroud)

但我不知道如何添加另一个条件并验证其中一个是否属实.

就像是:

validates :description, presence: true, if: :first_step? || :require_validation
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ste*_*zyn 30

您可以将lambda用于该if:子句并执行或条件.

validates :description, presence: true, if: -> {current_step == steps.first || require_validation}
Run Code Online (Sandbox Code Playgroud)


jre*_*ady 9

你能用一种方法包装吗?根据文件

:if - 指定要调用的方法,proc或字符串,以确定是否应该进行验证(例如,如果:: allow_validation,或者::proc.new {| user | user.signup_step> 2}).方法,proc或string应返回或计算为true或false值.

validates :description, presence: true, if: :some_validation_check

def some_validation_check
    first_step? || require_validation
end
Run Code Online (Sandbox Code Playgroud)