Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 预加载尝试获取错误的列名_Elixir_Ecto - Fatal编程技术网

Elixir 预加载尝试获取错误的列名

Elixir 预加载尝试获取错误的列名,elixir,ecto,Elixir,Ecto,我有以下对象 defmodule Ketchup.Review do ... schema "order_review" do ... has_many :review_tags, Review.Tag end end 及 并使用以下查询 @preload [:review_tags, :order] def get_review_by_order(order_id) do Ketchup.Review |> where([c], c.order

我有以下对象

defmodule Ketchup.Review do
  ...

  schema "order_review" do
    ...

    has_many :review_tags, Review.Tag

  end
end

并使用以下查询

@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
请给出以下错误:

 ** (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}
这篇
评论id
从哪里来?我已经检查了所有的代码,查看了atom或关联,但是没有找到任何东西。它应该是
order\u review\u id

通过以下迁移创建审阅标记:

create table(:review_tag) do
  add :review_tag, :string
  add :order_review_id, references(:order_review, on_delete: :delete_all)
end

由于您的模块名称以
review
结尾,因此Exto正在尝试使用键
review\u id
。如果您想使用其他按键,则必须在通话中指定
:foreign\u key
选项


请注意,我是根据您指定的
所属/3
猜测密钥名称的。

正确的代码是:has\u many:review\u tags,Ketchup.review.Tag,foreign\u key::order\u review\u id,但仍然不应该查看架构名称,在这种情况下,
order\u review
add添加
\u id
之后?我已经将Ketchup.review更改为Ketchup.order.review,这更符合上下文,但是如果我有Ketchup.Food.review,我需要不断更改外键以指向正确的方向,这有点混乱。这两种方法都可以起作用。如果它像您建议的那样对模式名称起作用,我可以看到人们在这里提出相反的问题。:)我认为保持现状的一个优点是它依赖于长生不老药代码约定,而不是数据库约定,因为数据库约定可能会有很大的差异。
create table(:review_tag) do
  add :review_tag, :string
  add :order_review_id, references(:order_review, on_delete: :delete_all)
end
has_many :review_tags, Ketchup.Review, foreign_key: :order_review_id