【问题标题】:Virtual models in ectoecto中的虚拟模型
【发布时间】:2018-05-29 01:24:27
【问题描述】:

有没有一种方法可以在 ecto 中定义虚拟模型。没有migration filedon't persist in the data base。我在 Ecto docs 中没有找到任何与此相关的文档。我需要这个来测试iex中的一些功能。使用与应用程序的其余部分分开的模型进行测试。

我发现 embedded schema 包含的字段不会保留在数据库中,但与模型无关。

任何帮助将不胜感激。

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

    嵌入式架构就好了。

    defmodule Test.Model do
      @moduledoc ~S"""
      The dummy test model that is not stored in the database.
      """
      use Ecto.Schema
      import Ecto.Changeset
    
      @type t :: Ecto.Schema.t
    
      @fields ~w|foo bar baz|a
      @primary_key false
    
      embedded_schema do
        field :foo, :string
        field :bar, :integer
        field :baz, :float
      end
    
      def new(data) when is_map(data) do
        %__MODULE__{}
        |> cast(data, @fields)
        |> validate_required(~w|foo|a)
        |> apply_changes()
      end
    end
    

    一旦定义,它就可以用作普通模式。

    【讨论】:

    • 谢谢,这正是我要找的。​​span>
    • 我要补充的唯一警告是apply_changes/1 忽略了有效性。在我的一个项目中,我创建了一个 maybe_apply_changes/1 函数,它返回 valid?: false 变更集以供调用者处理。来源:hexdocs.pm/ecto/Ecto.Changeset.html#apply_changes/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多