我有以下架构:
schema "products" do
field :product_id, :integer
field :title, :string
has_many :variants, MyApp.Variant, references: :product_id
timestamps
end
schema "variants" do
field :variant_id, :integer
field :title, :string
belongs_to :product, MyApp.Product
timestamps()
end
我想通过使用product表中的product_id字段而不是默认的id字段将变体链接到产品。
我遇到的问题是当我查询产品并预装变量时,我收到错误指向以下内容:
from v in MyApp.Variant,
where: v.product_product_id in ^[198977],
order_by: [asc: v.product_product_id],
select: {v.product_product_id, v}
Ecto认为变体表中的外键是product_product_id。 Ecto添加前缀 product _ 。
如何阻止Ecto添加前缀?前缀仅适用于id字段。
出于某种原因,我不能使用products表中的id字段链接到变量表。我必须使用不同的领域。
感谢。
答案 0 :(得分:0)
尝试更改架构中的belongs_to" variants"到:
belongs_to :product, MyApp.Product, foreign_key: :product_id
另外,要为架构中的主键使用不同的字段名称,您需要使用@primary_key
传递元组{field_name, type, options}
,例如:
@primary_key {:product_id, :id, autogenerate: true}
如果有帮助,请告诉我。