Current section

Files

Jump to
phoenix_ecto lib phoenix_ecto.ex
Raw

lib/phoenix_ecto.ex

if Code.ensure_loaded?(Phoenix.HTML) do
defimpl Phoenix.HTML.FormData, for: Ecto.Changeset do
def to_form(%Ecto.Changeset{model: model, params: params} = changeset, opts) do
{name, opts} = Keyword.pop(opts, :name)
%Phoenix.HTML.Form{
source: changeset,
name: to_string(name || form_for_name(model)),
model: model,
hidden: form_for_hidden(model),
params: params || %{},
options: Keyword.put_new(opts, :method, form_for_method(model))
}
end
defp form_for_name(%{__struct__: module}),
do: Phoenix.Naming.resource_name(module)
defp form_for_method(%{__state__: :loaded}), do: "put"
defp form_for_method(_), do: "post"
defp form_for_hidden(%{__state__: :loaded} = model) do
if pk = Ecto.Model.primary_key(model) do
[{model.__struct__.__schema__(:primary_key), pk}]
else
[]
end
end
defp form_for_hidden(_), do: []
end
defimpl Phoenix.HTML.Safe, for: Decimal do
def to_iodata(dec) do
Decimal.to_string(dec)
end
end
end