lib/attachment.ex

defmodule ActiveStorage.Attachment do
  use Ecto.Schema
  import Ecto.Changeset

  alias ActiveStorage.Blob

  schema "active_storage_attachments" do
    field :name, :string, null: false
    field :record_type, :string, null: false
    field :record_id, :integer, null: false

    belongs_to :blob, Blob

    timestamps(inserted_at: :created_at, updated_at: false)
  end

  @doc false
  def changeset(attachment, attrs) do
    attachment
    |> cast(attrs, [
      :name,
      :record_type,
      :record_id,
      :created_at
    ])
    |> cast_assoc(:blob)
    |> validate_required([
      :name,
      :record_type,
      :record_id,
      :created_at
    ])
    |> assoc_constraint(:blob)
  end
end