【发布时间】:2015-02-26 19:09:38
【问题描述】:
我正在尝试验证兑换码
@redemption_codes = Account.where(:redeemed == false).map(&:redemption_code)
validates :code, inclusion: { in: @redemption_codes }
before_create :remove_code
def remove_code
@redeemed = Account.where(:redeemed == true).map(&:redemption_code)
@redemption_codes.delete_if{|code|@redeemed.include?(code)}
end
如果代码已被兑换,我想将其从数组中删除,因此不再包含。
我来了
Undefined method delete_if for nil:NilClass
@redemption_codes 的值为nil
如果我输入的值不包含在数组中,我会收到一条错误消息。
当我输入包含在数组中的值时,它会起作用。换句话说,如果我注释掉remove_code 方法,它就可以工作。
问题是@redemption_codes 是一成不变的。如果一个值从:redeemed = false 更新为:redeemed = true,它不会从数组中消失。
这就是为什么我尝试创建自定义验证消息,但没有成功。
感谢您的帮助。
【问题讨论】:
-
代码
Account.where(:redeemed == false)没有意义。语法为Account.where(redeemed: false)。 -
或者,
Account.where(:redeemed => false)。看起来这可能是 OP 的语法错误或拼写错误。
标签: ruby-on-rails ruby arrays validation null