我正在制作一個多步驟表單。我從這個開始:
attr_writer :current_step
validates :EULA, acceptance: true,
if: -> { current_step == "paymentoptions" }
當我處于流程的某個步驟時,這可以驗證。但我需要添加條件。我嘗試過這樣的事情
attr_writer :current_step
attr_accessor :payment
validates :EULA, acceptance: true,
if: -> { current_step == "paymentoptions" && :payment == "Credit card" or "Wire transfer" }
為什么這個 lambda 不起作用?我究竟做錯了什么?
非常感謝您提前。
uj5u.com熱心網友回復:
這部分條件不正確:
... && :payment == "Credit card" or "Wiretransfer"
這里發生的情況是您將符號與字串進行比較,但它們顯然不匹配,因此or評估右分支(始終是真值)。所以這個條件就像根本沒有條件一樣作業。
你可能正在尋找的是smth。喜歡
... && payment.in?(["Credit card", "Wire transfer"])
uj5u.com熱心網友回復:
經過一番挖掘后,我找到了執行復雜驗證條件的“官方”方法,并希望在此處添加此資訊以確保完整性,而不是 Konstantin Strukov 和 Gabor Garami 的答案,它們專注于我最初的想法,即在一個 Lambda 中壓縮邏輯。
您可以像這樣創建復雜的驗證:
class Computer < ApplicationRecord
validates :mouse, presence: true,
if: [Proc.new { |c| c.market.retail? }, :desktop?],
unless: Proc.new { |c| c.trackpad.present? }
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495312.html
下一篇:僅列出的軌道ID與當前用戶相同
