Создать уникальный идентификатор в рельсах при сохранении записей - PullRequest
0 голосов
/ 03 марта 2019

Я выполняю массовые операции в приложении rails. В моем приложении я выбираю MAC-адрес из пользовательского интерфейса (в флажках), чтобы получить статус выбранного MAC-адреса и сохранить результаты в БД. Теперь я должен показать последние детали выполнения выбранногоMAC-адрес после получения статуса. Для этого мне нужно сохранить уникальный идентификатор для каждого выполнения. Ниже приведены результаты, которые должны быть сохранены в БД. Когда я выполняю идентификатор должен быть уникальным. Как создать уникальный идентификатор в рельсах?Если уникальный идентификатор уже присутствует в БД, он должен создать случайное число для каждого выполнения.

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 голосов
/ 03 марта 2019

Идентификатор является зарезервированным именем, и вы не можете иметь его в качестве имени столбца.по умолчанию любая сохраненная вами запись получит уникальный идентификатор, так что вам не нужно об этом беспокоиться.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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...