When i try to start the server or run the tests i get this error:
== Compilation error on file web/controllers/user_controller.ex ==
** (CompileError) web/controllers/user_controller.ex:9: SchoolDiary.User.__struct__/1 is undefined, cannot expand struct SchoolDiary.User
(stdlib) lists.erl:1354: :lists.mapfoldl/3
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
here is my controller:
defmodule SchoolDiary.UserController do
use SchoolDiary.Web, :controller
alias SchoolDiary.User
plug :scrub_params, "user" when action in [:create]
def create(conn, %{"user" => user_params}) do
changeset = User.registration_changeset(%User{}, user_params)
case Repo.insert(changeset) do
{:ok, user} ->
conn
|> put_status(:created)
|> render("show.json", user: user)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(SchoolDiary.ChangesetView, "error.json", changeset: changeset)
end
end
end
and my model:
defmodule SchoolDiary.User do
use SchoolDiary.Web, :model
schema "users" do
field :email, :string
field :password_hash, :string
field :password, :string, virtual: true
timestamps
end
def changeset(model, params \\ :empty) do
model
|> cast(params, ~w(email), [])
|> validate_length(:email, min: 1, max: 255)
|> validate_format(:email, ~r/@/)
end
def registration_changeset(model, params \\ :empty) do
model
|> changeset(params)
|> cast(params, ~w(password), [])
|> validate_length(:password, min: 6)
|> put_password_hash
end
defp put_password_hash(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{password: pass}} ->
put_change(changeset, :password_hash, Comeonin.Bcrypt.hashpwsalt(pass))
_ ->
changeset
end
end
end