Packages
ash_phoenix
2.1.25
2.3.24
2.3.23
2.3.22
2.3.21
2.3.20
2.3.19
2.3.18
2.3.17
2.3.16
2.3.15
2.3.14
2.3.13
2.3.12
2.3.11
2.3.10
2.3.9
2.3.8
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.26
2.1.25
2.1.24
2.1.23
2.1.22
2.1.21
2.1.20
2.1.19
2.1.18
2.1.17
2.1.16
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.8
2.0.0-rc.7
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.3.7
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.26
1.2.25
1.2.24
1.2.23
1.2.22
1.2.21
1.2.20
1.2.19
1.2.18
1.2.17
1.2.16
1.2.15
1.2.14
1.2.13
1.2.12
1.2.11
1.2.10
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.1.0-rc.3
1.1.0-rc.2
1.1.0-rc.1
1.1.0-rc.0
1.0.0-rc.1
1.0.0-rc.0
1.0.0-pre.2
1.0.0-pre.1
1.0.0-pre.0
0.7.7
0.7.6-rc.0
0.7.5
0.7.4
0.7.3
0.7.2-rc.2
0.7.2-rc.1
0.7.2-rc.0
0.7.1
0.7.0
0.6.0-rc.7
0.6.0-rc.6
0.6.0-rc.5
0.6.0-rc.4
0.6.0-rc.3
0.6.0-rc.2
0.6.0-rc.1
0.6.0-rc.0
0.5.19-rc.2
0.5.19-rc.1
0.5.19-rc.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.24
0.4.23
0.4.23-rc.1
0.4.23-rc.0
0.4.22-rc2
0.4.22-rc1
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Utilities for integrating Ash and Phoenix
Current section
Files
Jump to
Current section
Files
lib/ash_phoenix/form/no_form_configured.ex
defmodule AshPhoenix.Form.NoFormConfigured do
@moduledoc "Raised when attempting to refer to a form but no nested form with that name was configured."
defexception [:field, :available, :path, :action, :resource]
def exception(opts) do
%__MODULE__{
field: opts[:field],
available: opts[:available],
path: List.wrap(opts[:paths]),
action: Ash.Resource.Info.action(opts[:resource], opts[:action]),
resource: opts[:resource]
}
end
def message(%{field: field, available: available, path: path} = error) do
path_message =
if path do
"at path #{inspect(path)}"
else
""
end
"""
#{field} #{path_message} must be configured in the form to be used with `inputs_for`. For example:
#{hint(error)}
Available forms:
#{available |> Enum.map_join("\n", &"* #{&1}")}
Example Setup:
Form.for_create(
Resource,
:action,
params,
forms: [
# For forms over existing data
#{field}: [
type: :list,
as: "form_name",
data: <current_value>,
resource: RelatedResource,
update_action: :update
]
# For forms over new data
#{field}: [
type: :list,
as: "form_name",
create_action: :create
]
# For forms over both
#{field}: [
type: :list,
as: "form_name",
data: <current_value>,
resource: RelatedResource,
update_action: :update,
create_action: :create
]
]
)
"""
end
defp hint(error) do
cond do
argument = Enum.find(error.action.arguments, &(&1.name == error.field)) ->
"""
There is an argument called `#{argument.name}` on the action `#{inspect(error.resource)}.#{error.action.name}`.
Perhaps you are missing a `change manage_relationship` for that argument, or it is not a type that can have forms generated for it?
"""
attribute = Ash.Resource.Info.attribute(error.resource, error.field) ->
if attribute.name in error.action.accept do
"""
There is an attribute called `#{attribute.name}` on the resource `#{inspect(error.resource)}`, and it is
accepted by `#{inspect(error.resource)}.#{error.action.name}`.
Perhaps it is not a type that can have forms generated for it?
"""
else
"""
There is an attribute called `#{attribute.name}` on the resource `#{inspect(error.resource)}`, but it is
not accepted by `#{inspect(error.resource)}.#{error.action.name}`.
Perhaps you meant to add that attribute to the `accept` list, or you meant to make it `public? true`?
"""
end
relationship = Ash.Resource.Info.relationship(error.resource, error.field) ->
"""
There is a relationship called `#{relationship.name}` on the resource `#{inspect(error.resource)}`.
Perhaps you are missing an argument with `change manage_relationship` in the
action #{inspect(error.resource)}.#{error.action.name}?
"""
true ->
"""
There is a no attribute or relationship called `#{error.field}` on the resource `#{inspect(error.resource)}`, and
no argument called `#{error.field}` on `#{inspect(error.resource)}.#{error.action.name}`.
Perhaps you have a typo?
"""
end
end
end