我试图验证兑换码
@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
如果我输入一个未包含在数组中的值,我会收到一条错误的flash消息。
当我输入数组中包含的值时,它可以正常工作。换句话说,如果我注释掉remove_code
方法,它就会起作用。
问题是@redemption_codes
一成不变。如果值从:redeemed = false
更新为:redeemed = true
,则不会从数组中消失。
这就是为什么我尝试创建自定义验证邮件的原因,但它没有用。
非常感谢帮助。
答案 0 :(得分:0)
这是不正确的语法。
Account.where(:redeemed == false)
应该是
Account.where(redeemed: false)
你应该尝试这样的事情
def validate_code
@redemption_codes = Account.where(redeemed: false).map(&:redemption_code)
errors[:base] << "Invalid Redemption Code" unless @redemption_codes.include?(self.code)
end
您还可以使用uniqueness
验证器
validates :code, inclusion: { in: @redemption_codes }, uniqueness: true
这可确保兑换的帐户无效