update_columns обновляет строку, но она равна нулю при извлечении на рельсах - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь сохранить файл в корзину 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.Например, на моей консоли rails

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 Ответ

0 голосов
/ 05 октября 2018

У вас есть некоторый метод, определенный в Document классе (или включенном модуле), который переопределяет средство доступа к атрибуту по умолчанию.

Чтобы узнать, какой, запишите это в консоли:

Document.find(14).method(:path).source_location

В любом случае вы можете напрямую получить доступ к атрибуту с помощью

Document.find(14)['path']
...