Как перенести файл Carrierwave в столбец в другой модели в Rails - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть существующая модель, которая хранит файл с использованием Carrierwave.Я хотел бы переместить этот файл в новую модель, но я не могу правильно прочитать файл

Вот моя существующая модель:

class ShipmentNote < ActiveRecord::Base
  has_many :shipment_note_files # this is actually the new model I want to move the files to
  mount_uploader :file, DocumentUploader
  ....
end

И моя новая модель:

class ShipmentNoteFile < ActiveRecord::Base
  belongs_to :shipment_note
  mount_uploader :file, DocumentUploader
end

Это то, что я думал, будет работать:

ShipmentNote.where.not(file: nil).each do |shipment_note|
  # create a new file in the shipment_note_files
  shipment_note.shipment_note_files.create(file: shipment_note.file)
  # remove from shipment_note
  shipment_note.remove_file!
  shipment_note.save
end

Но он выдает следующую ошибку, подразумевая, что поле файла пустое:

PG::NotNullViolation: ERROR:  null value in column "file" violates not-null constraint
DETAIL:  Failing row contains (15, null, 46689, 2019-02-07 20:56:54.503714, 2019-02-07 20:56:54.503714, null).
: INSERT INTO "shipment_note_files" ("file", "shipment_note_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"

1 Ответ

0 голосов
/ 08 февраля 2019

Проблема заключалась в том, что файл действительно не существовал на S3.Я должен был спасти ошибку, и все работало хорошо:

ShipmentNote.where.not(file: nil).each do |shipment_note|
  begin
    # create a new file in the shipment_note_files
    shipment_note.shipment_note_files.create(file: shipment_note.file)
    # remove from shipment_note
    shipment_note.remove_file!
    shipment_note.save
  rescue => exception
    p "file not exist: #{shipment_note.id}"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...