在 Elixir/Ecto 中,如何在给定时区将现有 naive_datetime 字段的默认值更改为现在?
In Elixir/Ecto, how do I change the default value of an existing naive_datetime field to now in a given timezone?
假设我有这个模式:
schema "events" do
field :start, :naive_datetime
end
我想将 start
字段的默认值设置为大致 /events/new
页面加载的时间(“现在”)。让我们忽略用户通常不希望事件实际上立即开始的反对意见,并假设我们提前知道应该评估“现在”的时区(例如,“US/Mountain”)。
您可以在变更集级别执行此操作。
def create_changeset(event, attrs) do
event
|> cast(attrs, [:start])
|> put_start()
end
def put_start(%{changes: %{start: _start}} = changeset), do: changeset
def put_start(changeset) do
changeset
|> put_change(:start, current_time(timezone))
end
假设我有这个模式:
schema "events" do
field :start, :naive_datetime
end
我想将 start
字段的默认值设置为大致 /events/new
页面加载的时间(“现在”)。让我们忽略用户通常不希望事件实际上立即开始的反对意见,并假设我们提前知道应该评估“现在”的时区(例如,“US/Mountain”)。
您可以在变更集级别执行此操作。
def create_changeset(event, attrs) do
event
|> cast(attrs, [:start])
|> put_start()
end
def put_start(%{changes: %{start: _start}} = changeset), do: changeset
def put_start(changeset) do
changeset
|> put_change(:start, current_time(timezone))
end