Nel mio Tag codice modelloCome utilizzare il modulo Repo nel mio file di modello
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
Sopra codice ha causato un errore di seguito.
(UndefinedFunctionError) undefined function: Repo.all/1 (module Repo is not available)
Posso correggere l'errore?
Il modello Tag è modello di tag nidificato.
Il tag può contenere il tag principale.
Il codice finale è di seguito. Questo funziona bene.
Nel modello
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
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))
//
// ...
Grazie per la risposta dettagliata! Proverò a scrivere in 'tag_controller.ex' la logica di validazione. Perché, non ho altra logica finora per il modello Tag. – 2YY
Oops, ho fatto un errore ... proverò a scrivere in 'tag.ex' la pura logica come funzione e chiamare la funzione dal controller. Ho capito il punto. 'changeset = Tag.changeset (% Tag {}, tag_params) |> Tag.add_error_when_not_exists_tag_id (tag_params)' – 2YY