Rails – validation:如果一个条件为真

在Rails上5。

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

我可以根据这样的条件轻松validation:

 validates :description, presence: true, if: :first_step? def first_step? current_step == steps.first end 

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

就像是:

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

谢谢!

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

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

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

:if – 指定要调用的方法,proc或字符串,以确定是否应该进行validation(例如,如果:: 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 

您可以传递lambda作为if条件进行评估。

尝试:

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

如果您不想像Jared所说的那样添加一个方法,那么您可以尝试使用lambda

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