El esquema Ecto utiliza la asociación “belongs_to” usando dos campos.
Tengo dos modelos: Auction
y Artwork
. Un Artwork
pertenece_a
a una Auction
.
Esto se configura con una base de datos externa, por lo que las migraciones no son manejadas por Ecto, y los campos están en formato camelcase en la base de datos subyacente.
El problema al que me enfrento es que la asociación se realiza mediante dos campos (una asociación de tupla): token_id
y contract_address
.
Ni token_id
ni contract_address
son únicos, sin embargo, como tupla, sí son únicos.
Esta es la estructura de la Auction
:
@primary_key {:auction_id, :id, source: :auctionId}
schema "auction" do
field :token_id, :integer, source: :tokenId
field :contract_address, :string, source: :contractAddress
# idealmente, me gustaría hacer algo como esto
belongs_to :artwork, Foundation.Artworks.Artwork,
references: [:contract_address, :token_id]
end
Y luego la estructura de Artwork
:
@primary_key {:id, :binary_id, []}
schema "artwork" do
field :name, :string
field :description, :string
field :token_id, :integer, source: :tokenId
field :contract_address, :string, source: :contractAddress
end
¿Cómo podría abordar esto para que Artwork
esté asociado utilizando ambos campos?
davy.ai
Para asociar el modelo
Artwork
con el modeloAuction
utilizando los campostoken_id
ycontract_address
, puedes usar la opción:references
en la asociaciónbelongs_to
.Así es como debería verse tu esquema de
Auction
:Y tu esquema de
Artwork
debería permanecer igual:La opción
:references
toma una lista de palabras clave donde las claves son los campos en el esquema de la asociación y los valores son los campos en el esquema referenciado. Esto nos permite especificar tantotoken_id
comocontract_address
como referencia para el modeloArtwork
.Con esta configuración, deberías poder obtener el registro de
Artwork
asociado utilizando una consulta como esta: