我生成了两个模型Prefecture
和Shop
。
Shop
属于Prefecture
。
我收到错误
键:在以下位置找不到地名:
Ecto.Association.NotLoaded
我写了以下代码。
Prefecture.ex
defmodule Sample.Prefecture do
use Ecto.Schema
import Ecto.Changeset
schema "prefectures" do
field :prefecture_name, :string
has_many :shop, Sample.Shop
timestamps()
end
@doc false
def changeset(prefecture, attrs) do
prefecture
|> cast(attrs, [:prefecture_name])
|> validate_required([:prefecture_name])
end
end
Shop.ex
defmodule Sample.Shop do
use Ecto.Schema
import Ecto.Changeset
schema "shops" do
field :address, :string
field :phone_no, :string
field :store_name, :string
belongs_to :prefecture, Sample.Prefecture
timestamps()
end
@doc false
def changeset(shop, attrs) do
shop
|> cast(attrs, [:store_name, :address, :phone_no, :prefecture_id])
|> validate_required([:store_name, :address, :phone_no])
end
end
似乎还可以。但是错误发生了。
key :prefecture_name not found in: #Ecto.Association.NotLoaded<association :prefecture is not loaded>
我想做的就是获取地名。
该代码需要什么?
答案 0 :(得分:0)
在访问关系之前,您必须先preload。发生这种情况的原因是,当您从数据库中获取特定的架构时,嵌套关系不会被拉出,您必须显式地这样做。
在您的情况下,假设您有shop
值,女巫代表您数据库中的一条记录:
shop_preloaded = shop
|> Repo.preload(:prefecture_name)
答案 1 :(得分:0)
在这种情况下,我应该写以下内容。
Repo.all(Shop) |> Repo.preload(:prefecture)
谢谢。