我需要测试到期时间,为此我需要分配 insert_at 字段,但是当我这样做时
insert_registration(Map.put(attrs, :inserted_at, Ecto.DateTime.cast("2016-03-11 00:00:00")))
Run Code Online (Sandbox Code Playgroud)
inserted_at
字段总是被覆盖到当前时间
确保您投入:inserted_at
了changeset
所以,如果你有这样的事情:
def changeset(account, attrs) do
account
|> cast(attrs, [:name, :balance])
|> validate_required([:name, :balance])
|> unique_constraint(:name)
end
Run Code Online (Sandbox Code Playgroud)
您需要将其更改为:
def changeset(account, attrs) do
account
|> cast(attrs, [:name, :balance, :inserted_at])
|> validate_required([:name, :balance])
|> unique_constraint(:name)
end
Run Code Online (Sandbox Code Playgroud)
假设您的创建和更新上下文中有类似的内容:
def create_account(attrs \\ %{}) do
%Account{}
|> Account.changeset(attrs)
|> Repo.insert()
end
def update_account(%Account{} = account, attrs) do
account
|> Account.changeset(attrs)
|> Repo.update()
end
Run Code Online (Sandbox Code Playgroud)
然后您可以执行以下操作来创建:
attrs
|> Map.put(:inserted_at, DateTime.new!(~D[2016-05-24], ~T[13:26:08.003], "Etc/UTC"))
|> create_account()
Run Code Online (Sandbox Code Playgroud)
或更新以下内容:
update_account(account, %{ inserted_at: DateTime.new!(~D[2016-05-24], ~T[13:26:08.003], "Etc/UTC")})
Run Code Online (Sandbox Code Playgroud)