Ecto - 验证相关模型的存在

时间:2015-06-26 12:32:41

标签: elixir phoenix-framework ecto

如何在Ecto中验证相关模型的存在?

schema "foo" do
  has_many: bar, Bar

  timestamps
end

@required_fields ~w(bar) # invalid

有没有办法这样做?并验证这些字段的最小/最大数量?

1 个答案:

答案 0 :(得分:18)

还没有任何东西。但您可以在changeset函数中自行运行这些验证:

def changeset(model, params) do
  model
  |> cast(...)
  |> validate_bar_association()
end

def validate_bar_association(changeset) do
  bar = changeset.model.bar
  cond do
    bar == nil ->
      add_error changeset, :bar, "No bar"
    length(bar) < 5 ->
      changeset
    true ->
      add_error changeset, :bar, "waaaay too many"
  end
end

我们确实希望更好地设置嵌套关联,但我们的优先级列表中还有其他项目。 :)