我有两种模式:位置和发布。
# 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}
答案 0 :(得分:2)
如果表中有另一个表的外键,则需要使用的关系是belongs_to
,而不是has_one
。这应该有效:
schema "posts" do
...
belongs_to :location, App.Location
end