Ошибка обновления ActiveRecord - недопустимый идентификатор нулевой длины - PullRequest
0 голосов
/ 21 июня 2019

Я использую простую программу Rails + ActiveRecord, где я хочу взять записи из базы данных, где столбец "transfered_at" равен нулю, и обновить его с текущим временем.

orders_ora = Orders.where(transfered_at: nil)
orders_ora.each do |order_ora|

   puts order_ora.name 
   order_ora.update(transfered_at: Time.now)
end

Однако, это не позволяет мне это делать. Вот ошибка, которую я получаю:

OCIError: ORA-01741: недопустимый идентификатор нулевой длины: ОБНОВЛЕНИЕ "ORDERS" SET "TRANSFERED_AT" =: a1 ГДЕ "ORDERS". "" NULL (ActiveRecord :: StatementInvalid)

Чего мне не хватает?

Edit: мне нужно использовать это внутри цикла, потому что я делаю другие вычисления внутри него. И формат времени, похоже, не является проблемой, потому что я пытаюсь обновить другой столбец с типом «число», и я получаю ту же ошибку. Если я попытаюсь сделать это так:

   order_ora.inspection_id = 333
   order_ora.save

также выдает ту же ошибку, что и раньше.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Я нашел ответ на этот вопрос сам, он не был связан с кодом.

Проблема была в том, что в моей таблице не было PK , и похоже, что ActiveRecords использует его для генерации операторов SQL.

0 голосов
/ 21 июня 2019

Почему вы просматриваете результаты? Вы можете сделать это одним запросом:

Orders.where(transfered_at: nil).update(transfered_at: Time.now)

В чем может быть проблема, что Time.now не в правильном формате для вашей таблицы? Используйте strftime в этом случае:

Orders.where(transfered_at: nil).update(transfered_at: Time.now.strftime('%H:%M') )
...