Activerecord читает UUID как целое число.Мне нужен фактический UUID в виде строки - PullRequest
2 голосов
/ 22 апреля 2019

Я пытаюсь сохранить имя файла с тем же именем, что и хэш соответствующей записи.

В настоящее время импортер данных использует рельсы, но база данных и соответствующая схема были сгенерированы вне приложения.

Когда я читаю модель Account в psql, я вижу:

select * from accounts where id=1

id                     | 1
first_name             | JOHN
middle_name            |
last_name              | DOE
suffix                 |
dob                    | 1985-11-29 00:00:00
gender                 | M             
hash                   | 5062a455-ad6e-4104-ae49-92d12b1fbd27

, когда я использую ActiveRecord, я получаю следующее: Account.first

id: 1,
first_name: "JOHN",
middle_name: "",
last_name: "DOE",
dob: Fri, 29 Nov 1985 00:00:00 UTC +00:00,
gender: "M",
hash: "5062a455-ad6e-4104-ae49-92d12b1fbd27"

Когда я пытаюсь получить доступ к хешу, используя Account.first.hash, я получаю -1029718433662254257 вместо "5062a455-ad6e-4104-ae49-92d12b1fbd27".

По сути, я хочу сделать filename = "#{account.hash}.png", но теперь все мои имена файлов являются отрицательными числами, а не UUID.

Есть идеи, что происходит?

1 Ответ

2 голосов
/ 22 апреля 2019

hash - это метод на основе Object в Ruby.Ничего, что вы можете сделать с этим на самом деле *, кроме изменения названия поля в вашей БД.https://apidock.com/ruby/Object/hash

Создает хеш-значение Fixnum для этого объекта.Эта функция должна иметь свойство, которое a.eql? (B) подразумевает a.hash == b.hash.Значение хеша используется классом Hash.Любое значение хеша, которое превышает емкость Fixnum, будет усечено перед использованием.


Как указано в комментариях, вы также можете получить к нему прямой доступ с помощью

# in your view or model
account[:hash]
...