如何避免Ecto在has_many关系上为引用添加前缀

时间:2016-06-28 15:59:59

标签: elixir ecto

我有以下架构:

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字段链接到变量表。我必须使用不同的领域。

感谢。

1 个答案:

答案 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}

如果有帮助,请告诉我。