我被迫避免某些操作的默认ID。
我有模型广告。我添加了一个名为标识符的新列。现在我想在创建新广告时添加唯一的随机整数序列。
到目前为止,我想出了这个解决方案:
class Advertisement < ActiveRecord::Base
before_create :add_identifier
def add_identifier
identifier = ('0'..'9').to_a.shuffle.first(5).join
end
end
到目前为止,它只是创建随机5位数的长数字。但是如何检查之前创建的广告是否已经有这个号码?以及如何在创建时将其插入数据库?
或者更好的解决方案是在Create action下的控制器中?
由于
答案 0 :(得分:1)
这段代码最多会重试5次,以生成尚未拍摄的ID。您可能希望为标识符属性添加唯一性验证(以及DB中的唯一索引约束)。另外,请查看SecureRandom ruby模块以生成随机标识符。
class Advertisement < ActiveRecord::Base
before_create :add_identifier
def add_identifier
retries = 0
loop do
self.identifier = ('0'..'9').to_a.shuffle.first(5).join
retries += 1
break if retries == 5 || !self.class.find_by(identifier: self.identifier)
end
end
end