首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预装载尝试获取错误的列名

预装载尝试获取错误的列名
EN

Stack Overflow用户
提问于 2018-02-12 23:49:06
回答 1查看 206关注 0票数 2

我有以下对象。

代码语言:javascript
复制
defmodule Ketchup.Review do
  ...

  schema "order_review" do
    ...

    has_many :review_tags, Review.Tag

  end
end

代码语言:javascript
复制
defmodule Ketchup.Review.Tag do
  ...
  schema "review_tag" do
    ...
    belongs_to :order_review, Ketchup.Review
  end
end

并使用以下查询

代码语言:javascript
复制
@preload [:review_tags, :order]
def get_review_by_order(order_id) do
  Ketchup.Review
  |> where([c], c.order_id == ^order_id)
  |> preload(^@preload)
  |> Repo.one()
end

给出以下错误:

代码语言:javascript
复制
 ** (Ecto.QueryError) deps/ecto/lib/ecto/association.ex:495: field `Ketchup.Review.Tag.review_id` in `where` does not exist in the schema in query:

 from t in Ketchup.Review.Tag,
   where: t.review_id == ^2,
   order_by: [asc: t.review_id],
   select: {t.review_id, t}

这款review_id将何去何从?我已经检查了所有要审查的代码,以及任何原子或关联,但没有找到任何东西。应该是order_review_id

使用以下迁移创建审查标签:

代码语言:javascript
复制
create table(:review_tag) do
  add :review_tag, :string
  add :order_review_id, references(:order_review, on_delete: :delete_all)
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 00:23:49

由于您的模块名称以Review结尾,Ecto正在尝试使用密钥review_id。如果要使用其他密钥,则必须在has_many/3调用中指定:foreign_key选项。

代码语言:javascript
复制
has_many :review_tags, Ketchup.Review, foreign_key: :order_review_id

只需注意,我是根据您指定的belongs_to/3猜测密钥名称的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48750317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档