We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Post 12
Game Site Journal - 03
Published on: 2025-04-12
Tags:
elixir, Blog, Side Project, LiveView, Game Site, Ecto, Authorization, User Name
For this post I wanted to go over the way you can add in a new column for a table, specifically for adding in a User Name for the authorization table in my Game Site. First an foremost you must you the command line to create a new migration (you could always manully do this but start here). mix ecto.new.migration the_name_for_the_migration_or_what_it_does This will created a timestamped file under priv/repo/migrations Within this file you could add and other table (create table(:name)) or in this case we will alter a table with the following def change do alter table(:users) do add :user_name, :string, null: false end end Once this is done we need to alter the schema for the table. schema "users" do ... field :user_name, :string ... Then we need to be sure that we cast the information as well as be sure that the name is not taken. def registration_changeset(user, attrs, opts \\ []) do user |> cast(attrs, [:email, :password, :user_name]) # be sure to add in :user_name ... |> unsafe_validate_unique(:user_name, Blog.Repo) |> unique_constraint(:user_name, message: "Name taken") end The last 2 line will make sure that you are not adding in a used name. The first of the 2 will allow the changeset to check the data.base for the name. We now need to change the user creation page and allow for the new field. <.simple_form for={@form} id="registration_form" phx-submit="save" phx-change="validate" phx-trigger-action={@trigger_submit} action={~p"/users/log_in?_action=registered"} method="post" ... <.input field={@form[:email]} type="email" label="Email" required /> <.input field={@form[:password]} type="password" label="Password" required /> <.input field={@form[:user_name]} type="text" label="User Name" required /> ... </.simple_form> The last line is the new field. So long as you have all the correct settings from above you should have a new column for your User db.
