sql >> Databáze >  >> RDS >> PostgreSQL

Rails 5.2 ActiveStorage s UUID na Postgresql

Po hodinách chodu řádek po řádku ve zdrojovém kódu a spouštění stejných příkazů

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

znovu a znovu. Znovu a znovu jsme dostali stejné náhodné výsledky. Potom jsme prošli lištami protokolů vytištěnými při připojování obrázku ke zprávě a pozorovali jsme následující:

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 byl nastaven jako 534736 , místo uuid. Tady jsme udělali chybu.

Aktivní úložiště očekávalo celočíselný cizí klíč k našemu modelu zpráv a my jsme chtěli, aby místo toho používalo uuid. Takže jsme museli opravit naši migraci, abychom místo celočíselných cizích klíčů používali uuid.

Řešení:

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

Doufám, že to pomůže, někdo má podobné problémy. na zdraví!



  1. Pomalý jednoduchý aktualizační dotaz na databázi PostgreSQL s 3 miliony řádků

  2. MySQL Event If Příkaz END IF Error

  3. MySQL:hledání duplikátů ve více polích

  4. Získejte název měsíce z čísla v PostgreSQL