在模型中,我有:
validates :special_code, presence: true, uniqueness: true
before_save :special_code, :regenerate_special_code
控制器:
def special_code
( (0...8).map { char = (65 + rand(26)).chr; }[0..rand(2...4)] << rand(1..9) ).join
end
我想要做的是重新生成special_code
(如果它不是唯一的)。
伪代码:
def regenerate_special_code
special_code if special_code != unique
end
目前rails只输出一个错误,说“special_code不是唯一的”。 (我不希望这种情况发生。用户永远不应该看到这个错误。它应该只调用regenrate_special_code
,直到创建一个唯一的代码,然后将记录存储到数据库。)
答案 0 :(得分:0)
model.rb
....
before_save :generate_special_code
....
private
def generate_special_code
self.special_code = ( (0...8).map { char = (65 + rand(26)).chr; }[0..rand(2...4)] << rand(1..9) ).join
generate_special_code if Model.exsits?(special_code: self.special_code)
end
....
不需要此validate
行和regenerate_special_code
。我的示例将生成一些special_code,直到它唯一。
PS。我会调查SecureRandom,看起来你试图为你的模型生成一个随机令牌,这可以用SecureRandom.uuid