Use Changesets Without Schemas

Learn how to use changeset without schemas.

We'll cover the following

Up to this point, our changesets have been based on the schemas defined in our music_db application, such as Artist, Genre, and so forth. Changesets don’t actually need Ecto schemas, though. They can be created with plain maps that define field names and types. This means that we can leverage changesets casting, filtering, and validation features, even if the data is not persisted in a database.

Let’s say that our application will have an “Advanced Search” feature. We’ll allow users to specify the number of different fields to help them find what they’re looking for, artist names, album titles, dates, and the like. We can validate the form using the features of Ecto.Changeset and then report any errors back to the user. Recall that changesets are just data structures and have a lot of utility before they are sent to the database.

The first step is to set up a map that defines the shape of the data we want to process. The keys should be the field names and the values should be the data types for each field. We can use any data types supported by the Ecto.Schema module. Here’s what we might use for our “Advanced Search” feature:

Get hands-on with 1400+ tech skills courses.