(Ecto.QueryError)deps / ecto / lib / ecto / association.ex:399:查询架构中不存在`where`中的字段`App.Location.post_id`

时间:2016-09-16 00:51:47

标签: elixir phoenix-framework

我有两种模式:位置和发布。

# Models
schema "locations" do
  ...
  has_many :posts, App.Post
  timestamps()
end

schema "posts" do
  ...
  has_one :location, App.Location
end

我能够成功插入

changeset =
  location
  |> build_assoc(:posts)
  |> Post.changeset(params)
Repo.insert(changeset)

但是当我尝试使用Repo.preload加载数据时出现错误

App.Repo.one(App.Post) |> App.Repo.preload(:location)
** (Ecto.QueryError) deps/ecto/lib/ecto/association.ex:399: field `App.Location.post_id` in `where` does not exist in the schema in query:

from l in App.Location,
  where: l.post_id == ^5,
  select: {l.post_id, l}

1 个答案:

答案 0 :(得分:2)

如果表中有另一个表的外键,则需要使用的关系是belongs_to,而不是has_one。这应该有效:

schema "posts" do
  ...
  belongs_to :location, App.Location
end