我已经为ruby模型创建了一个自定义验证(使用luhn算法)。即使我刚刚回来 false
从自定义验证中,对象仍然保存。
这就是我的信用卡模型:
before_save :check_card_number
private
def check_card_number
return false unless card_number_luhn
end
def card_number_luhn
#luhn_algorithm_here_that_returns_true_or_false
end
但即使我只是返回false:
before_save :check_card_number
private
def check_card_number
return false
end
# so this is never even called
def card_number_luhn
#luhn_algorithm_here_that_returns_true_or_false
end
对象仍然保存。即使我使用 validate
而不是 before_save
. 发生了什么事?
1条答案
按热度按时间zpf6vheq1#
在rails 5中,您需要显式地调用
throw(:abort)
```...
before_save :check_card_number
...
def card_number_luhn
valid = #luhn_algorithm_here_that_returns_true_or_false
throw(:abort) unless valid
end