update_columns обновляет строку, но она равна нулю при извлечении на рельсах
Я пытаюсь сохранить файл в корзину Google Storage, я следовал официальному руководству по рельсам.
Итак, у меня есть этот код для обновления моего файла
after_create :upload_document, if: :path
def upload_document
file = Document.storage_bucket.create_file \
path.tempfile,
"cover_images/#{id}/#{path.original_filename}",
content_type: path.content_type,
acl: "public"
# Update the url to my path field on my database
update_columns(path: file.public_url)
end
Я могу сохранить свой файл в моем ведре, я могу получить public_url
и обновить поле пути в моей таблице, но когда я пытаюсь получить строку пути, у меня есть nil
, Пример на моей консоли рельсов
Document.find(14)
=> #<Document id: 14, name: "Test", path: "https://storage.googleapis.com/xxxxxxxx-xxxx.x...", created_at: "2018-10-05 07:17:59", updated_at: "2018-10-05 07:17:59">
Document.find(14).path
=> nil
Document.find(14).name
=> "Test"
Так что я не понимаю, почему я могу получить доступ к своему полю пути в моей базе данных SQL после обновления, используя update_columns Rails.
Большое спасибо за вашу помощь
1 ответ
У вас есть метод, определенный на Document
класс (или включенный модуль), который переопределяет атрибут доступа по умолчанию.
Чтобы узнать что, напишите это в консоли:
Document.find(14).method(:path).source_location
В любом случае вы можете получить прямой доступ к атрибуту с помощью
Document.find(14)['path']