我有一个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/

10-09 02:53