Ruby on rails 验证失败,因为验证存在性不受rails 5的尊重
我的交易模型属于两个UserWallet发送者、接收者和钱包实例。 我验证了这两个实例的存在,以及其他属性货币、金额。。。 在创建时,我还要确保发件人的钱包有足够的钱来创建该交易Ruby on rails 验证失败,因为验证存在性不受rails 5的尊重,ruby-on-rails,Ruby On Rails,我的交易模型属于两个UserWallet发送者、接收者和钱包实例。 我验证了这两个实例的存在,以及其他属性货币、金额。。。 在创建时,我还要确保发件人的钱包有足够的钱来创建该交易 class Transaction < ApplicationRecord belongs_to :sender_wallet, class_name: 'UserWallet' belongs_to :receiver_wallet, class_name: 'UserWallet' valida
class Transaction < ApplicationRecord
belongs_to :sender_wallet, class_name: 'UserWallet'
belongs_to :receiver_wallet, class_name: 'UserWallet'
validates :sender_wallet, :receiver_wallet, :amount, :currency, presence: true
validate :validate_balance, on: :create
def validate_balance
if sender_wallet.balance < amount
errors.add(:amount, 'Not enough money')
end
end
end
这不应该因为发送者的钱包没有设置而失败吗?
我试着用控制台来研究它,当我这样做的时候
Transaction.create(amount: 10000, currency: 'EUR')
它以同样的方式失败
感谢您的帮助所有验证将逐一撤销。因此,根据您的代码,首先,它将验证存在,然后验证平衡 现在,在validate_balance validation中,您有导致此错误的发件人\u wallet nil 在通过以下三种方式验证\u余额方法之前,更好地检查发件人\u钱包是否存在: 在您的验证代码中
validate :validate_balance, on: :create, if: -> { sender_wallet_id.present? }
在您的验证_平衡方法中
def validate_balance
if sender_wallet.present? && sender_wallet.balance < amount
errors.add(:amount, 'Not enough money')
end
end
使用try:attribute,这不会生成异常
def validate_balance
if sender_wallet.try(:balance) < amount
errors.add(:amount, 'Not enough money')
end
end
谢谢你的回答。老实说,如果我事后还要检查,我不明白验证发件人的钱包是否存在的意义。仅供参考,它在rails 4中工作正常
def validate_balance
if sender_wallet.try(:balance) < amount
errors.add(:amount, 'Not enough money')
end
end