Packages

phx_crud provides standard macros for common phoenix crud operations

Current section

Files

Jump to
phx_crud lib macros create_macro.ex
Raw

lib/macros/create_macro.ex

defmodule PhxCrud.CreateRecord do
# pass options like this
# use PhxCrud.CreateRecord, repo: MyApp.Repo
defmacro __using__(options \\ []) do
quote location: :keep do
@options unquote(options)
@phx_crud_model @options[:model] || @model
@phx_crud_repo @options[:repo] || Application.get_env(:phx_crud, :repo)
@phx_crud_error_view @options[:error_view] || Application.get_env(:phx_crud, :error_view)
@phx_crud_view @options[:view] || @view
@view_wrapper @options[:view_wrapper] || @singular
if !@phx_crud_repo do
raise "Please specify phx_crud Repo in config or while calling this macro"
end
if !@phx_crud_error_view do
raise "Please specify phx_crud error_view in config or while calling this macro"
end
if !@phx_crud_view do
raise "Please specify phx_crud view in config or while calling this macro"
end
def create(conn, %{@view_wrapper => params}) do
changeset = @phx_crud_model.changeset(struct(@phx_crud_model), params)
with {:ok, record} <- @phx_crud_repo.insert(changeset) do
conn
|> put_status(:created)
|> render(@phx_crud_view, :show, record: record)
else
{:error, changeset} ->
conn
|> put_status(422)
|> render(
@phx_crud_error_view,
:errors,
code: 422,
message: "Invalid changeset",
changeset: changeset
)
end
end
defoverridable create: 2
end
end
end