Current section
Files
Jump to
Current section
Files
priv/templates/mandarin.gen.schema/schema.ex
defmodule <%= inspect schema.module %> do<%
simple_fields = for {k, _} <- schema.attrs, do: k
assoc_fields = for {_, k, _, _} <- schema.assocs, do: k
all_fields = simple_fields ++ assoc_fields
assoc_names = for {_, k, _, _} <- schema.assocs, do: String.replace_suffix(to_string(k), "_id", "")
%>
use Ecto.Schema
import Ecto.Changeset
<%= if schema.binary_id do %>
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id<% end %>
schema <%= inspect schema.table %> do
<%= for {k, v} <- schema.types do %> field <%= inspect k %>, <%= inspect v %><%= schema.defaults[k] %>
<% end %><%= for {_, k, string_alias, _} <- schema.assocs do %><% assoc_name = String.replace_suffix(to_string(k), "_id", "") %> belongs_to :<%= assoc_name %>, <%= string_alias %>, on_replace: :nilify
<% end %>
timestamps()
end
@doc false
def changeset(<%= schema.singular %>, attrs) do
<%= schema.singular %>
|> cast(attrs, [<%= Enum.map_join(all_fields, ", ", fn field -> inspect(field) end) %>])
|> validate_required([<%= Enum.map_join(simple_fields, ", ", fn field -> inspect(field) end) %>])<%= for assoc_name <- assoc_names do %>
|> cast_assoc(:<%= assoc_name %>)<% end %>
<%= for k <- schema.uniques do %> |> unique_constraint(<%= inspect k %>)
<% end %> end
def display(nil), do: ""
def display(<%= schema.singular %>), do: "#{<%= schema.singular %>.<%= schema.attrs |> List.first() |> elem(0) %>}"
def select_search_field() do
:<%= schema.attrs |> List.first() |> elem(0) %>
end
end