在保存记录的同时在rails中创建唯一ID

时间:2019-03-03 14:42:54

标签: ruby-on-rails

我正在Rails应用程序中执行批量操作。在我的应用程序中,我正在从UI中选择Mac地址(在复选框中)以获取所选mac地址的状态并将结果保存到db。现在我必须显示所选的最后执行细节获取状态后的mac地址。为此,我需要为每次执行保存一些唯一的ID。下面需要存储在DB中的结果。无论何时我执行ID都应该是唯一的。如何在Rails中创建唯一的ID?如果db中已经存在唯一ID,则必须为每次执行创建一些随机数。

MacAddress    Status    id

6A:56:78:88   Online     1

78:88:98:90   Offline    1

//Next Execution
6A:56:78:88   Online     2

78:88:98:90   Online      2

1 个答案:

答案 0 :(得分:0)

Id是保留名称,您不能将其用作列名称。 默认情况下,您保存的所有记录将获得唯一的ID,因此您无需担心。 Produc.create(mac_address: "6A:56:78:88", status: "Online")将创建具有唯一ID的新记录。 Mac地址已经具有唯一的值可参考,因为没有两个设备具有相同的Mac地址(或者至少不应该这样) 因此找到记录Product.find_by(mac_address: "6A:56:78:88")会给您正确的记录。

如果要控制要保存为主键的ID号,那么这可能是一个很好的解决方案:

unique_id = rand(2**32..2**64-1) 
while !Product.where(mac_address: unique_id).blank?  do
  unique_id = rand(2**32..2**64-1)
 end
new_product = Product.create(id: unique_id, mac_address: "6A:56:78:88", status: "Online")

如果您要生成唯一的代码作为字符串并将其编入索引,则:

unique_id = SecureRandom.urlsafe_base64
new_product= Product.create(id: unique_id, mac_address: "6A:56:78:88", status: "Online")