Идентификатор является зарезервированным именем, и вы не можете иметь его в качестве имени столбца.по умолчанию любая сохраненная вами запись получит уникальный идентификатор, так что вам не нужно об этом беспокоиться.Produc.create(mac_address: "6A:56:78:88", status: "Online")
создаст новую запись с уникальным идентификатором.Mac-адрес уже имеет уникальное значение для ссылки, поскольку не существует двух устройств с одинаковым mac-адресом (или, по крайней мере, не должно быть), поэтому для поиска вашей записи Product.find_by(mac_address: "6A:56:78:88")
даст вам правильную запись.
Если вы хотите взять под контроль номер идентификатора, который вы сохраняете в качестве первичного ключа, тогда это может быть хорошим решением:
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")