在我的 Rails 4 应用程序中,我想覆盖 Active Record 以创建具有 7 位随机数的 id 的记录。例如 4526378 而不是 1。我找到了一种方法来做到这一点,但我不确定它是正确的方法。在我的模型中,我有:
class App < ActiveRecord::Base
after_initialize :add_id
def add_id
self.id ||= SecureRandom.random_number(9999999) if self.new_record?
end
end
这是一种可接受的方式吗?是否会发生任何冲突,如果会发生什么,它是否会再次尝试使用新的 SecureRandom 创建记录。还有什么方法可以在我的 config/initializers 中设置和 initializer.rb 文件自动为每个模型执行此操作?谢谢
好的,所以我在我的 config/initializers 目录中添加了一个名为 active_record.rb 的初始化程序。里面的代码如下:
class ActiveRecord::Base
before_create :set_id
def set_id
self.id = SecureRandom.random_number(9999999)
end
end
上面的这段代码实际上工作得很好,但现在发生了冲突。在此代码中,我可以执行检查以确保其唯一性吗?如果不是,则生成一个新的。我也会将其更改为SecureRandom.hex
以允许字母减少碰撞的机会。