我有一个Ecto Repo和其中一个架构的问题
测试。该架构如下:
defmodule Elixirserver.Transactions.Bank do
@behaviour Elixirserver.ContentDump
use Ecto.Schema
import Ecto.Changeset
alias Elixirserver.Transactions.Account
@attrs [:name, :code]
schema "banks" do
field(:name, :string)
field(:code, :string)
has_many(:account, Account)
timestamps()
end
@doc false
def changeset(bank, attrs \\ []) do
bank
|> cast(attrs, @attrs)
|> validate_required(@attrs)
end
def to_json(bank) do
%{
id: bank.id,
name: bank.name,
code: bank.code,
type: "BANK"
}
end
end
当我尝试执行测试时,我得到以下信息:
(UndefinedFunctionError) function
Elixirserver.Transactions.Bank.fetch/2 is undefined
(Elixirserver.Transactions.Bank does not implement the Access behaviour)
测试是这样的:
def create(conn, %{"bank" => bank_params}) do
with {:ok, %Bank{} = bank} <- Transactions.create_bank(bank_params) do
conn
|> put_status(:created)
|> put_resp_header("location", bank_path(conn, :show, bank))
|> render("show.json", id: bank["id"])
end
end
现在,显然这是因为未实现访问行为。我需要明确提供吗?
我正在使用ExMachina生成固定装置,并且使用
mix phx.gen.json
生成了资源。 最佳答案
bank["id"]
很可能是问题所在。结构没有实现访问接口,您应该使用点使它起作用:bank.id
。
可以在here中找到详细信息。
关于functional-programming - Ecto.Repo收到未实现访问行为的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50917366/