I have the following schema in my Phoenix App:
defmodule TattooBackend.Accounts.Account do
@moduledoc """
Contains schema and changesets for Account resource.
"""
use Ecto.Schema
import Ecto.Changeset
alias TattooBackend.Accounts.Account
schema "accounts" do
field :email, :string
field :crypted_password, :string
field :password, :string, virtual: true
timestamps()
end
def changeset(%Account{} = user, attributes \\ %{}) do
user
|> cast(attributes, [:email, :password])
|> validate_required([:email, :password])
|> validate_length(:password, min: 6)
|> validate_format(:email, ~r/([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})/)
|> unique_constraint(:email, name: "accounts_lower_email_index")
|> put_password_hash
end
defp put_password_hash(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{password: pass}} ->
put_change(changeset, :crypted_password, Comeonin.Bcrypt.hashpwsalt(pass))
_ ->
changeset
end
end
end
And I wrote simple test:
defmodule TattooBackend.Accounts.AccountTest do
use TattooBackend.DataCase, async: true
alias TattooBackend.Repo
alias TattooBackend.Accounts.Account
describe "with invalid attributes" do
setup do
changeset = Account.changeset(%Account{})
{:ok, %{changeset: changeset}}
end
test "changeset is inalid", %{changeset: changeset} do
refute changeset.valid?
end
test "changeset have errors", %{changeset: changeset} do
assert changeset.errors == [
email: {"can't be blank", [validation: :required]},
password: {"can't be blank", [validation: :required]},
]
end
end
end
Now my question is how can I translate these Ecto validation messages?
message
option for pretty much all validation functions which allow you to provide the error's text. Or I am missing something? – NoDisplayNameerrors.pot
anderrors.po
files so it should work without passing any custom messages. – Mateusz UrbańskiEcto
to be aware of howPhoenix
handles error messages? – Aleksei MatiushkinEcto.Changeset.traverse_errors
and translate error messages to the language of your choice. This topic might also be helpful. – Aleksei Matiushkin