PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Rails 5.2 ActiveStorage с UUID на Postgresql

След часове на работа ред по ред в изходния код на activestorage и изпълнява същите команди

@message = Message.new(message_params)
@message.save

отново и отново. Получаваме същите произволни резултати отново и отново. След това прегледахме релсите на регистрационните файлове, отпечатани, докато прикачвахме изображението към съобщението, и наблюдавахме следното:

S3 Storage (363.4ms) Uploaded file to key: KBKeHJARTjnsVjkgSbbii4Bz (checksum: S0GjR1EyvYYbMKh44wqlag==)

ActiveStorage::Blob Create (0.4ms)  INSERT INTO "active_storage_blobs" ("key", "filename", "content_type", "metadata", "byte_size", "checksum", "created_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"  [["key", "KBKeHJARTjnsVjkgSbbii4Bz"], ["filename", "sample.pdf"], ["content_type", "application/pdf"], ["metadata", "{\"identified\":true}"], ["byte_size", 3028], ["checksum", "S0GjR1EyvYYbMKh44wqlag=="], ["created_at", "2018-07-26 04:54:33.029769"]]

ActiveStorage::Attachment Create (2.7ms)  INSERT INTO "active_storage_attachments" ("name", "record_type", "record_id", "blob_id", "created_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["name", "file"], ["record_type", "Message"], ["record_id", "534736"], ["blob_id", "0"], ["created_at", "2018-07-26 05:04:35.958831"]]

record_id беше зададен като 534736 , вместо uuid. Ето къде сгрешихме.

Активното хранилище очакваше целочислен външен ключ към нашия модел на съобщения и искахме вместо това да използва uuids. Така че трябваше да коригираме нашата миграция, за да използваме uuid вместо целочислени външни ключове.

Решение:

class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
  def change
    create_table :active_storage_blobs, id: :uuid do |t|
      t.string   :key,        null: false
      t.string   :filename,   null: false
      t.string   :content_type
      t.text     :metadata
      t.bigint   :byte_size,  null: false
      t.string   :checksum,   null: false
      t.datetime :created_at, null: false

      t.index [ :key ], unique: true
    end

    create_table :active_storage_attachments, id: :uuid do |t|
      t.string     :name,     null: false
      t.references :record,   null: false, polymorphic: true, index: false, type: :uuid
      t.references :blob,     null: false, type: :uuid

      t.datetime :created_at, null: false

      t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
    end
  end
end

Надявам се това да помогне, някой, който се сблъсква с подобни проблеми. наздраве!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLalchemy не извършва промени при задаване на роля

  2. PDO bindColumn и PDO::FETCH_BOUND -- задължителни или незадължителни?

  3. Hibernate + PostgreSQL:връзката не съществува - SQL грешка:0, SQLState:42P01

  4. Създайте динамична таблица от функция в PostgreSQL

  5. PostgreSQL:създаване на генерирана колона