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 }
- Titlecase只用f.label中的第一个词汇
- Rails OpenID身份validation插件不再安装Rake任务?
- 接收错误PG :: UndefinedColumn:ERROR:使用Geocoder的near方法时,mymodels.distance列不存在
- Rails:我更新迁移文件然后运行db:migrate,但我的架构没有更新
- 如何将’premailer’与Rails集成
- rails控制器是multithreading的吗? 控制器中的Thread.exclusive
- rails路由:id无效
- Rails日期与Date.today相比
- 如何使用ActiveStorage在上传到云之前压缩图像