变更集中字段的默认值

时间:2016-11-29 07:40:18

标签: elixir phoenix-framework

我有一个模型和变更集方法。我想要一个可选字段,如果它没有传递给chargeset,我想设置一个默认值。我怎么能这样做?

2 个答案:

答案 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