Im having a problem here… as the title suggest, my error_tag isnt working, its simply not showing the error message:
new.html.eex
<%= form_for @changeset, Routes.category_path(@conn, :create), fn f -> %>
<label for="category_name" class="form-label">Nome da Categoria</label>
<%= text_input f, :name, class: "form-control", placeholder: "Nome" %>
<%= error_tag f, :name %>
<%= submit "Cadastrar", class: "btn btn-primary my-3" %>
<% end %>
controller
def create(conn, %{"category" => category}) do
case Records.category_create(category) do
{:ok, _inserted_category} ->
conn
|> put_flash(:info, "Categoria criada!")
|> redirect(to: Routes.category_path(conn, :index))
{:error, changeset} ->
conn
|> put_flash(:error, "Erro ao criar categoria!")
|> render("new.html", changeset: changeset)
end
end
context
defdelegate category_changeset(category, params), to: Category, as: :changeset
defdelegate category_create(params), to: Category, as: :create
changeset and repo action
def changeset(%Category{} = category, params \\ %{}) do
category
|> cast(params, [:name])
|> validate_required([:name])
|> validate_length(:name, min: 3, max: 15)
|> validate_format(:name, ~r{\S})
|> unique_constraint(:name)
end
def create(params) do
%Category{}
|> changeset(params)
|> Repo.insert()
end
inspected changeset
Its working properly, the error is there!
[debug] Processing with ConfinWeb.CategoryController.index/2
Parameters: %{}
Pipelines: [:browser]
[debug] QUERY OK source="categories" db=15.0ms idle=407.0ms
SELECT c0."id", c0."name" FROM "categories" AS c0 []
#Ecto.Changeset<
action: :insert,
changes: %{},
errors: [name: {"can't be blank", [validation: :required]}],
data: #Confin.Records.Category<>,
valid?: false
>
HTML generated