#<Class:0x00007ffbd1c309b8> 的未定义方法 'user'



我不明白为什么我不能在这里使用self?

class PayoutRequest < ApplicationRecord
validates :phone, confirmation: true, on: :create
validates :phone_confirmation, presence: true, on: :create
belongs_to :user, foreign_key: "user_id"
validates :amount, numericality: { only_integer: true, greater_than_or_equal_to: 300, smaller_than_or_equal: self.user.balance }
scope :paid, -> { where(:paid => true) }
scope :unpaid, -> { where(:paid => false) }
end

我该怎么写?

使用自定义方法,例如:

validate :amount_not_greater_than_balance
def amount_not_greater_than_balance
return if amount <= user.balance
errors.add(:amount, "can't be greater than balance")
end

此外,您可能只应该运行这个特定的验证规则on: :create——因为在未来的晚些时候,变得超过用户余额可能是完全可以接受的。

因为self不是你想象的那样。如果你不知道或忘记了,验证DSL只是对类本身调用的方法。在这里,您基本上调用PayoutRequest.validates并向它传递一些参数。

validates :amount, numericality: { only_integer: true, greater_than_or_equal_to: 300, smaller_than_or_equal: self.user.balance }
^           ^ arg     ^ kw arg   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
method name                                 just a regular hash, defined at the class level. So `self` is the class.

最新更新