是否可以在不使用模型的情况下使用Elixir变更集/验证?

Zac*_*Zac 2 elixir ecto phoenix-framework

这会像定义你的架构一样简单def changeset而且从不写任何东西Repo.insert(changeset)吗?

Bur*_*jaM 5

这是可能的,我发现它是验证API请求的完美方式.

您可以在没有后端的情况下定义模型:

defmodule MyApp.Models.File do
  schema "" do
    field :description, :string, virtual: true
    field :url,         :string, virtual: true
    field :file_name,   :string, virtual: true
    field :ext,         :string, virtual: true
    field :mime,        :string, virtual: true
    field :size,        :integer, virtual: true
  end

  def new_file_cs(model, params) do
    model
    |> cast(params, ~w(url file_name ext mime size), ~w(description))
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在某处将其称为:

def handle_request(data) do
  changeset = File.new_file_cs(%File{}, data)
  case changeset.valid? do
    true  -> :ok
    false -> {:error, changeset}
  end
end
Run Code Online (Sandbox Code Playgroud)

这种错误响应可以与phoenix生成的ChangesetView一起使用,以返回统一的错误响应.

总而言之,您的模型应该具有空模式"",并且所有字段都应该是虚拟的:true