In meinem Tag ModellcodeWie Repo-Modul in meiner Modelldatei
schema "tags" do
field :name, :string
field :parent, :integer # parent tag id
timestamps
end
def add_error_when_not_exists_tag_id(changeset, params) do
tags = Repo.all(Tag)
is_exists_tag_id = Enum.reduce(tags, fn(x, acc) -> acc || (x.id === params.parent) end)
if is_exists_tag_id, do: changeset, else: add_error(changeset, :parent, "not exists parent!")
end
Above-Code verwenden, um einen Fehler unten verursacht.
(UndefinedFunctionError) undefined function: Repo.all/1 (module Repo is not available)
Kann ich den Fehler beheben? Das Tag-Modell ist verschachtelt Tag-Modell.
Tag-Dose hat Eltern-Tag.
Endgültiger Code ist unten. Das ist gut.
Im Modell
def add_error_when_not_exists_tag_id(changeset, params, tags) do
is_exists_tag_id = Enum.reduce(tags, false, fn(x, acc) -> acc || (Integer.to_string(x.id) === params["parent"]) end)
if is_exists_tag_id, do: changeset, else: add_error(changeset, :parent, "The tag is not exists.")
end
In Controller
def create(conn, %{"tag" => tag_params}) do
changeset = Tag.changeset(%Tag{}, tag_params)
|> Tag.add_error_when_not_exists_tag_id(tag_params, Repo.all(Tag))
//
// ...
Danke für die ausführliche Antwort! Ich werde versuchen, in "tag_controller.ex" die Validierungslogik zu schreiben. Weil ich bisher keine andere Logik für das Tag-Modell habe. – 2YY
Hoppla, ich habe einen Fehler gemacht ... Ich werde versuchen, in 'tag.ex' die reine Logik als Funktion zu schreiben und die Funktion vom Controller aus aufzurufen. Ich verstehe. 'changeset = Tag.ändern (% Tag {}, tag_params) |> Tag.add_error_when_not_exists_tag_id (tag_params)' – 2YY