Ecto - validate presence of associated model

2020-06-09 05:30发布

How can one validate the presence of an associated model in Ecto ?

schema "foo" do
  has_many: bar, Bar

  timestamps
end

@required_fields ~w(bar) # invalid

Is there a way to do so ? And validate a min/max number of these fields ?

1条回答
Anthone
2楼-- · 2020-06-09 06:18

There isn't anything yet. But you can run these validations yourself in your changeset function:

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

We do want to make nested associations better but there are other items higher up on our priority list. :)

查看更多
登录 后发表回答