在create,Rails 4上为模型添加唯一标识符

时间:2014-12-10 16:45:29

标签: ruby-on-rails

我被迫避免某些操作的默认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下的控制器中?

由于

1 个答案:

答案 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