Подтвердить что ты не робот

Ecto - проверка наличия связанной модели

Как можно проверить наличие связанной модели в Ecto?

schema "foo" do
  has_many: bar, Bar

  timestamps
end

@required_fields ~w(bar) # invalid

Есть ли способ сделать это? И подтвердите минимальное/максимальное количество этих полей?

4b9b3361

Ответ 1

Пока ничего нет. Но вы можете выполнить эти проверки самостоятельно в своей функции 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

Мы хотим сделать вложенные ассоциации лучше, но в нашем списке приоритетов есть другие элементы.:)