我尝试执行以下操作:
add :balance, :decimal, default: 0.0
add :balance, :decimal, default: "0.0"
add :balance, :decimal, default: Decimal.new("0.0")
前两个完全不起作用,因为如果我未明确传递值,则新创建的记录仍会返回nil
。
第三个返回此错误:
**(ArgumentError)类型
#Decimal<0.0>
未知的默认:decimal
。 :default可以是字符串,数字,布尔值, 字符串,整数列表,map(类型为Map时)或片段(...)
我现在唯一想到的解决方法是使用put_change/3:
def changeset(account, attrs) do
account
|> put_change(:balance, Decimal.new("0.0"))
end
但是,我更喜欢在迁移本身上执行此操作。我该怎么办?
答案 0 :(得分:2)
我在Elixir Slack上问了同样的问题,并被告知第一个应该起作用。
我再次检查,第一个确实起作用。只是Repo.insert()
将该列返回为nil
,但是如果我再次检索该记录,它将显示为#Decimal<0E-10>
,这意味着默认值确实起作用。