linusdm

linusdm

What actually triggers a validation in LiveView while doing live validation (without changing the database)?

Hi!

What actually triggers a validation in LiveView while doing live validation (without changing the database)? I’m struggeling with understanding how ecto changesets work in this regard. During live validation (the kind of validation that is added when using mix phx.gen.live) no changes are made to the database. I’m curious how this actually works, without inserting or updating the database.

Is the last line (Map.put(:action, :validate)) responsible?

changeset =
  socket.assigns.model
  |> Models.change_model(model_params)
  |> Map.put(:action, :validate)

(or what does it do if that’s not the case?)

I’m in a situation where I want to trigger validation again, after using Changeset.change/2 on an existing changeset (which contains changes that are relevant and should be kept). Right now I’m creating a new changeset and triggering all validations again, but I suspect I’m doing this wrong. Any insight into understanding how and when valid? and errors is updated, is appreciated. I guess it must be explained somewhere in the docs, but I can’t find it here: Ecto.Changeset — Ecto v3.14.0

Thanks in advance!

Marked As Solved

LostKobrakai

LostKobrakai

It happens whenever you call Ecto.Changeset.validate_*. Changesets do not “register validations” they validate right when you call the API. This also means there’s no “rerun validations”. That’s simply not how changesets work. So you actually want to create the changeset fresh whenever you have new changes.

With LV you sometimes get partial changes. In this case I suggest first trying to find a way to not receive partial changes (e.g. integrate with the html form) or pulling out changeset.params and merge that with you new data as the input for a new changeset.

Also Liked

LostKobrakai

LostKobrakai

Validations run before constraints, because constraints are not run by ecto at all, but by the database. Ecto just converts error responses of the db to internal errors for constraints.

The :action is mostly about communicating intend. E.g. phoenix form error helpers only show errors if :action has a value. So you don’t need to create an errorless changeset as the inital changeset backing a form.

Where Next?

Trending in Questions Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
tj0
I’ve been following the steps here for the upgrade from 1.6 to 1.7 and it has gone relatively smoothly all the way till the phoenix_view ...
New
cgraham
Hi! What is currently the best library/method for parsing text and tabular data out of PDF files in Elixir or Erlang?
New
stefanchrobot
Hi, I need a way to handle data migrations in my application. I found an article by @wojtekmach about manual migrations: Automatic and ma...
New
stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
kip
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
webofbits
Squid Mesh is an open source workflow automation runtime for Elixir applications. It is aimed at Phoenix and OTP apps that want to defin...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
kip
In 2021 I started a new library called Tempo with the objective of modelling time as a set of intervals - not as instants. In 2022 I gave...
New

We're in Beta

About us Mission Statement