我有一个模型和变更集方法。我想要一个可选字段,如果它没有传递给chargeset,我想设置一个默认值。我怎么能这样做?
答案 0 :(得分:13)
创建架构时,可以通过将:default
原子传递给它来为其指定默认值。
schema "foo" do
field :name, :string, default: "bar"
end
答案 1 :(得分:2)
如果您的需求很简单,Justin的回答绝对是最优雅的,但就我而言,我需要更多的灵活性。我需要能够生成一个唯一的,密码安全的值。
我在变更集管道中做到了:
def changeset(build_proxy, attrs) do
build_proxy
|> cast(attrs, [:avatar, :channel, :username, :service_base_url])
|> gen_api_token_if_empty()
|> validate_required([:avatar, :channel, :username, :service_base_url])
end
defp gen_api_token_if_empty(changeset) do
case get_change(changeset, :api_token) do
nil -> put_change(changeset, :api_token, gen_api_token())
"" -> put_change(changeset, :api_token, gen_api_token())
_ -> changeset
end
end
defp gen_api_token() do
:crypto.strong_rand_bytes(80)
|> Base.url_encode64
|> binary_part(0, length)
end