Just don’t put it into the params / changeset. Treat the params as an opaque data structure.
# in your controller
def create(conn, %{"magnet" => magnet_params}) do
case Magnets.create_magnet(magnet_params, for: conn.assigns.current_user) do
{:ok, magnet} ->
conn
|> put_flash(:info, "Magnet created successfully.")
|> redirect(to: magnet_path(conn, :show, magnet))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
# in your business logic module
def create_magnet(attrs, for: %User{id: user_id}) do
%Magnet{user_id: user_id}
|> Magnet.changeset(attrs)
|> Repo.insert()
end
# in the module where you schema / changesets are defined
def changeset(manget, attrs) do
magnet
|> cast(attrs, [:title, :description, :content])
|> validate_required([:title, :description, :content])
end