我有這樣一個模式:爲什麼在Ecto模型模式中默認值的函數只評估一次以及如何解決?
defmodule Ticketing.User do
use Ticketing.Web, :model
schema "users" do
field :first_name, :string
field :last_name, :string
field :email, :string
field :hashed_password, :string
field :password, :string, virtual: true
field :active, :boolean, default: false
field :activation_key, :string, default: Ecto.UUID.generate
field :description, :string
timestamps()
end
@doc """
Builds a changeset based on the `struct` and `params`.
"""
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:first_name, :last_name, :email, :hashed_password, :password,
:active])
|> validate_required([:first_name, :last_name, :email, :password])
end
end
所有新用戶擁有相同的UUID。模式中的默認值只評估一次?我應該在changeset而不是schema中實現默認值嗎?
我不確定替代方案是什麼,但是,':default'是在編譯時評估的。請參閱[Schema.field/3](https://hexdocs.pm/ecto/Ecto.Schema.html#field/3)。 –
@MickMacCallum非常好的一點。所以這解釋了爲什麼!謝謝。 – Farsheed