Hello, I always use phoenix ecto and I have had no problem with it, but now I have to use elixir project, please see this outputs:
Error:
{:error,
#Ecto.Changeset<
action: :update,
changes: %{
email: "email@gmail89.1com",
name: "username",
password: "hell",
username: "username-name"
},
errors: [
password: {"pass",
[count: 7, validation: :length, kind: :min]}
],
data: #AuthService.Users.UserSchema<>,
valid?: false
>}
and work output
#Ecto.Changeset<
action: nil,
changes: %{username: "username"},
errors: [],
data: #AuthService.Users.UserSchema<>,
valid?: true
>
now my code:
def edit_user(id, attrs) do
with {:ok, user_id} <- Ecto.UUID.cast(id), {:ok, user} <- find_user_with_user_id(user_id) do
UserSchema.changeset(user, attrs)
|> Repo.update
else
{:error, msg} ->
{:error, msg}
_ ->
{:error, "User dosent exist"}
end
end
always the code print {:error, "User dosent exist"}
, but I have written {:error, msg}
, and it does not consider. even I used this code on my with flow:
{:ok, _info} <- UserSchema.changeset(user, attrs)
why is it different and I can’t handle it on some pattern, I used some code like this before
def edit_user(id, new_params) do
get_user_by_id(id)
|> UserSchema.changeset(new_params)
|> Repo.update
end
and I could check it’s output by case and …
case Repo.insert(changeset) do
{:ok, user} -> {:ok, user}
{:error, changeset} -> {:error, changeset}
end
I can separate my functions and handle it, but I want to know is there a better way or not ?