如何在Ecto迁移中为小数列设置默认值?

时间:2018-11-27 03:47:52

标签: elixir phoenix-framework ecto

我尝试执行以下操作:

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

但是,我更喜欢在迁移本身上执行此操作。我该怎么办?

1 个答案:

答案 0 :(得分:2)

我在Elixir Slack上问了同样的问题,并被告知第一个应该起作用。

我再次检查,第一个确实起作用。只是Repo.insert()将该列返回为nil,但是如果我再次检索该记录,它将显示为#Decimal<0E-10>,这意味着默认值确实起作用。