mirror of
https://github.com/ash-project/ash.git
synced 2024-09-21 05:53:06 +12:00
12923 lines
294 KiB
Text
12923 lines
294 KiB
Text
<!--
|
|
This file was generated by Spark. Do not edit it by hand.
|
|
-->
|
|
# DSL: Ash.Resource.Dsl
|
|
|
|
|
|
|
|
## attributes
|
|
A section for declaring attributes on the resource.
|
|
|
|
|
|
### Nested DSLs
|
|
* [attribute](#attributes-attribute)
|
|
* [create_timestamp](#attributes-create_timestamp)
|
|
* [update_timestamp](#attributes-update_timestamp)
|
|
* [integer_primary_key](#attributes-integer_primary_key)
|
|
* [uuid_primary_key](#attributes-uuid_primary_key)
|
|
|
|
|
|
### Examples
|
|
```
|
|
attributes do
|
|
uuid_primary_key :id
|
|
|
|
attribute :first_name, :string do
|
|
allow_nil? false
|
|
end
|
|
|
|
attribute :last_name, :string do
|
|
allow_nil? false
|
|
end
|
|
|
|
attribute :email, :string do
|
|
allow_nil? false
|
|
|
|
constraints [
|
|
match: ~r/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/
|
|
]
|
|
end
|
|
|
|
attribute :type, :atom do
|
|
constraints [
|
|
one_of: [:admin, :teacher, :student]
|
|
]
|
|
end
|
|
|
|
create_timestamp :inserted_at
|
|
update_timestamp :updated_at
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## attributes.attribute
|
|
```elixir
|
|
attribute name, type
|
|
```
|
|
|
|
|
|
Declares an attribute on the resource.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
attribute :name, :string do
|
|
allow_nil? false
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the attribute. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more, see the [constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-sensitive?" href="#name-type-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute value contains sensitive information, like PII. See the [Security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-source" href="#name-type-source">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the field should be mapped to a different name in the data layer. Support varies by data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-always_select?" href="#name-type-always_select?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
always_select?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to ensure this attribute is always selected when reading from the database, regardless of applied select statements.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-primary_key?" href="#name-type-primary_key?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary_key?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether the attribute is the primary key. Composite primary key is also possible by using `primary_key? true` in more than one attribute. If primary_key? is true, allow_nil? must be false.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be set to nil. If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-generated?" href="#name-type-generated?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
generated?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value may be generated by the data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-writable?" href="#name-type-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value can be written to. Non-writable attributes can still be written with `Ash.Changeset.force_change_attribute/3`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-private?" href="#name-type-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute is not publically writable, and should not be exposed over any public interfaces. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all creates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-update_default" href="#name-type-update_default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
update_default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all updates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-filterable?" href="#name-type-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be referenced in filters.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-match_other_defaults?" href="#name-type-match_other_defaults?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
match_other_defaults?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Ensures that other attributes that use the same "lazy" default (a function or an mfa), use the same default value. Has no effect unless `default` is a zero argument function.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Attribute`
|
|
|
|
## attributes.create_timestamp
|
|
```elixir
|
|
create_timestamp name
|
|
```
|
|
|
|
|
|
Declares a non-writable attribute with a create default of `&DateTime.utc_now/0`
|
|
|
|
Accepts all the same options as `d:Ash.Resource.Dsl.attributes.attribute`, except it sets
|
|
the following different defaults:
|
|
|
|
writable? false
|
|
private? true
|
|
default &DateTime.utc_now/0
|
|
match_other_defaults? true
|
|
type Ash.Type.UTCDatetimeUsec
|
|
allow_nil? false
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
create_timestamp :inserted_at
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type" href="#name-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Ash.Type.UtcDatetimeUsec</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the attribute. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-constraints" href="#name-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more, see the [constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-sensitive?" href="#name-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute value contains sensitive information, like PII. See the [Security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-source" href="#name-source">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the field should be mapped to a different name in the data layer. Support varies by data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-always_select?" href="#name-always_select?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
always_select?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to ensure this attribute is always selected when reading from the database, regardless of applied select statements.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary_key?" href="#name-primary_key?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary_key?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether the attribute is the primary key. Composite primary key is also possible by using `primary_key? true` in more than one attribute. If primary_key? is true, allow_nil? must be false.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-allow_nil?" href="#name-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be set to nil. If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-generated?" href="#name-generated?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
generated?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value may be generated by the data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-writable?" href="#name-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value can be written to. Non-writable attributes can still be written with `Ash.Changeset.force_change_attribute/3`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-private?" href="#name-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute is not publically writable, and should not be exposed over any public interfaces. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-default" href="#name-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">&DateTime.utc_now/0</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all creates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-update_default" href="#name-update_default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
update_default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all updates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-filterable?" href="#name-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be referenced in filters.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-match_other_defaults?" href="#name-match_other_defaults?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
match_other_defaults?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Ensures that other attributes that use the same "lazy" default (a function or an mfa), use the same default value. Has no effect unless `default` is a zero argument function.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Attribute`
|
|
|
|
## attributes.update_timestamp
|
|
```elixir
|
|
update_timestamp name
|
|
```
|
|
|
|
|
|
Declares a non-writable attribute with a create and update default of `&DateTime.utc_now/0`
|
|
|
|
Accepts all the same options as `d:Ash.Resource.Dsl.attributes.attribute`, except it sets
|
|
the following different defaults:
|
|
|
|
writable? false
|
|
private? true
|
|
default &DateTime.utc_now/0
|
|
match_other_defaults? true
|
|
update_default &DateTime.utc_now/0
|
|
type Ash.Type.UTCDatetimeUsec
|
|
allow_nil? false
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
update_timestamp :updated_at
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type" href="#name-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Ash.Type.UtcDatetimeUsec</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the attribute. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-constraints" href="#name-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more, see the [constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-sensitive?" href="#name-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute value contains sensitive information, like PII. See the [Security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-source" href="#name-source">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the field should be mapped to a different name in the data layer. Support varies by data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-always_select?" href="#name-always_select?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
always_select?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to ensure this attribute is always selected when reading from the database, regardless of applied select statements.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary_key?" href="#name-primary_key?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary_key?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether the attribute is the primary key. Composite primary key is also possible by using `primary_key? true` in more than one attribute. If primary_key? is true, allow_nil? must be false.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-allow_nil?" href="#name-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be set to nil. If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-generated?" href="#name-generated?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
generated?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value may be generated by the data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-writable?" href="#name-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value can be written to. Non-writable attributes can still be written with `Ash.Changeset.force_change_attribute/3`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-private?" href="#name-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute is not publically writable, and should not be exposed over any public interfaces. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-default" href="#name-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">&DateTime.utc_now/0</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all creates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-update_default" href="#name-update_default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
update_default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">&DateTime.utc_now/0</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all updates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-filterable?" href="#name-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be referenced in filters.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-match_other_defaults?" href="#name-match_other_defaults?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
match_other_defaults?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Ensures that other attributes that use the same "lazy" default (a function or an mfa), use the same default value. Has no effect unless `default` is a zero argument function.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Attribute`
|
|
|
|
## attributes.integer_primary_key
|
|
```elixir
|
|
integer_primary_key name
|
|
```
|
|
|
|
|
|
Declares a generated, non writable, non-nil, primary key column of type integer.
|
|
|
|
Generated integer primary keys must be supported by the data layer.
|
|
|
|
Accepts all the same options as `d:Ash.Resource.Dsl.attributes.attribute`, except for `allow_nil?`, but it sets
|
|
the following different defaults:
|
|
|
|
writable? false
|
|
primary_key? true
|
|
generated? true
|
|
type :integer
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
integer_primary_key :id
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type" href="#name-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:integer</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the attribute. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-constraints" href="#name-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more, see the [constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-sensitive?" href="#name-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute value contains sensitive information, like PII. See the [Security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-source" href="#name-source">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the field should be mapped to a different name in the data layer. Support varies by data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-always_select?" href="#name-always_select?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
always_select?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to ensure this attribute is always selected when reading from the database, regardless of applied select statements.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary_key?" href="#name-primary_key?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary_key?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether the attribute is the primary key. Composite primary key is also possible by using `primary_key? true` in more than one attribute. If primary_key? is true, allow_nil? must be false.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-generated?" href="#name-generated?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
generated?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value may be generated by the data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-writable?" href="#name-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value can be written to. Non-writable attributes can still be written with `Ash.Changeset.force_change_attribute/3`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-private?" href="#name-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute is not publically writable, and should not be exposed over any public interfaces. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-default" href="#name-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all creates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-update_default" href="#name-update_default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
update_default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all updates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-filterable?" href="#name-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be referenced in filters.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-match_other_defaults?" href="#name-match_other_defaults?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
match_other_defaults?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Ensures that other attributes that use the same "lazy" default (a function or an mfa), use the same default value. Has no effect unless `default` is a zero argument function.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Attribute`
|
|
|
|
## attributes.uuid_primary_key
|
|
```elixir
|
|
uuid_primary_key name
|
|
```
|
|
|
|
|
|
Declares a non writable, non-nil, primary key column of type `uuid`, which defaults to `Ash.UUID.generate/0`.
|
|
|
|
Accepts all the same options as `d:Ash.Resource.Dsl.attributes.attribute`, except for `allow_nil?`, but it sets
|
|
the following different defaults:
|
|
|
|
writable? false
|
|
default &Ash.UUID.generate/0
|
|
primary_key? true
|
|
generated? true
|
|
type :uuid
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
uuid_primary_key :id
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type" href="#name-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:uuid</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the attribute. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-constraints" href="#name-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more, see the [constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the attribute.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-sensitive?" href="#name-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute value contains sensitive information, like PII. See the [Security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-source" href="#name-source">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the field should be mapped to a different name in the data layer. Support varies by data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-always_select?" href="#name-always_select?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
always_select?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to ensure this attribute is always selected when reading from the database, regardless of applied select statements.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary_key?" href="#name-primary_key?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary_key?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether the attribute is the primary key. Composite primary key is also possible by using `primary_key? true` in more than one attribute. If primary_key? is true, allow_nil? must be false.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-generated?" href="#name-generated?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
generated?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value may be generated by the data layer.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-writable?" href="#name-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the value can be written to. Non-writable attributes can still be written with `Ash.Changeset.force_change_attribute/3`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-private?" href="#name-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute is not publically writable, and should not be exposed over any public interfaces. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-default" href="#name-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">&Ash.UUID.generate/0</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all creates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-update_default" href="#name-update_default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
update_default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A value to be set on all updates, unless a value is being provided already.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-filterable?" href="#name-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the attribute can be referenced in filters.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-match_other_defaults?" href="#name-match_other_defaults?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
match_other_defaults?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Ensures that other attributes that use the same "lazy" default (a function or an mfa), use the same default value. Has no effect unless `default` is a zero argument function.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Attribute`
|
|
|
|
|
|
|
|
|
|
## relationships
|
|
A section for declaring relationships on the resource.
|
|
|
|
Relationships are a core component of resource oriented design. Many components of Ash
|
|
will use these relationships. A simple use case is loading relationships (done via the `Ash.Query.load/2`).
|
|
|
|
See the [relationships guide](/documentation/topics/relationships.md) for more.
|
|
|
|
|
|
### Nested DSLs
|
|
* [has_one](#relationships-has_one)
|
|
* [has_many](#relationships-has_many)
|
|
* [many_to_many](#relationships-many_to_many)
|
|
* [belongs_to](#relationships-belongs_to)
|
|
|
|
|
|
### Examples
|
|
```
|
|
relationships do
|
|
belongs_to :post, MyApp.Post do
|
|
primary_key? true
|
|
end
|
|
|
|
belongs_to :category, MyApp.Category do
|
|
primary_key? true
|
|
end
|
|
end
|
|
|
|
```
|
|
|
|
```
|
|
relationships do
|
|
belongs_to :author, MyApp.Author
|
|
|
|
many_to_many :categories, MyApp.Category do
|
|
through MyApp.PostCategory
|
|
destination_attribute_on_join_resource :category_id
|
|
source_attribute_on_join_resource :post_id
|
|
end
|
|
end
|
|
|
|
```
|
|
|
|
```
|
|
relationships do
|
|
has_many :posts, MyApp.Post do
|
|
destination_attribute :author_id
|
|
end
|
|
|
|
has_many :composite_key_posts, MyApp.CompositeKeyPost do
|
|
destination_attribute :author_id
|
|
end
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## relationships.has_one
|
|
```elixir
|
|
has_one name, destination
|
|
```
|
|
|
|
|
|
Declares a `has_one` relationship. In a relational database, the foreign key would be on the *other* table.
|
|
|
|
Generally speaking, a `has_one` also implies that the destination table is unique on that foreign key.
|
|
|
|
See the [relationships guide](/documentation/topics/relationships.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
# In a resource called `Word`
|
|
has_one :dictionary_entry, DictionaryEntry do
|
|
source_attribute :text
|
|
destination_attribute :word_text
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-manual" href="#name-destination-manual">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A module that implements `Ash.Resource.ManualRelationship`. Also accepts a 2 argument function that takes the source records and the context.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-no_attributes?" href="#name-destination-no_attributes?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
no_attributes?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
All existing entities are considered related, i.e this relationship is not based on any fields, and `source_attribute` and `destination_attribute` are ignored. See the See the [relationships guide](/documentation/topics/relationships.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-allow_nil?" href="#name-destination-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Marks the relationship as required. Has no effect on validations, but can inform extensions that there will always be a related entity.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-from_many?" href="#name-destination-from_many?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
from_many?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Signal that this relationship is actually a `has_many` where the first record is given via the `sort`. This will allow data layers to properly deduplicate when necessary.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-name" href="#name-destination-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination" href="#name-destination-destination">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-description" href="#name-destination-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination_attribute" href="#name-destination-destination_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute on the related resource that should match the `source_attribute` configured on this resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-validate_destination_attribute?" href="#name-destination-validate_destination_attribute?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validate_destination_attribute?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to validate that the destination field exists on the destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-source_attribute" href="#name-destination-source_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:id</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field on this resource that should match the `destination_attribute` on the related resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-relationship_context" href="#name-destination-relationship_context">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_context
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Context to be set on any queries or changesets generated for managing or querying this relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-private?" href="#name-destination-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-not_found_message" href="#name-destination-not_found_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
not_found_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on update or create, or when managing relationships.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-writable?" href="#name-destination-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship may be managed.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-read_action" href="#name-destination-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action on the destination resource to use when loading data and filtering.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-api" href="#name-destination-api">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
api
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The API module to use when working with the related entity.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filter" href="#name-destination-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to be applied when reading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filterable?" href="#name-destination-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `false`, the relationship will not be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-sort" href="#name-destination-sort">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sort
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A sort statement to be applied when loading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-could_be_related_at_creation?" href="#name-destination-could_be_related_at_creation?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
could_be_related_at_creation?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not related values may exist for this relationship at creation.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-violation_message" href="#name-destination-violation_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
violation_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on destroy.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Relationships.HasOne`
|
|
|
|
## relationships.has_many
|
|
```elixir
|
|
has_many name, destination
|
|
```
|
|
|
|
|
|
Declares a `has_many` relationship. There can be any number of related entities.
|
|
|
|
See the [relationships guide](/documentation/topics/relationships.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
# In a resource called `Word`
|
|
has_many :definitions, DictionaryDefinition do
|
|
source_attribute :text
|
|
destination_attribute :word_text
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-manual" href="#name-destination-manual">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A module that implements `Ash.Resource.ManualRelationship`. Also accepts a 2 argument function that takes the source records and the context.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-no_attributes?" href="#name-destination-no_attributes?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
no_attributes?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
All existing entities are considered related, i.e this relationship is not based on any fields, and `source_attribute` and `destination_attribute` are ignored. See the See the [relationships guide](/documentation/topics/relationships.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-name" href="#name-destination-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination" href="#name-destination-destination">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-description" href="#name-destination-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination_attribute" href="#name-destination-destination_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute on the related resource that should match the `source_attribute` configured on this resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-validate_destination_attribute?" href="#name-destination-validate_destination_attribute?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validate_destination_attribute?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to validate that the destination field exists on the destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-source_attribute" href="#name-destination-source_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:id</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field on this resource that should match the `destination_attribute` on the related resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-relationship_context" href="#name-destination-relationship_context">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_context
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Context to be set on any queries or changesets generated for managing or querying this relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-private?" href="#name-destination-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-not_found_message" href="#name-destination-not_found_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
not_found_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on update or create, or when managing relationships.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-writable?" href="#name-destination-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship may be managed.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-read_action" href="#name-destination-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action on the destination resource to use when loading data and filtering.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-api" href="#name-destination-api">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
api
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The API module to use when working with the related entity.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filter" href="#name-destination-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to be applied when reading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filterable?" href="#name-destination-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `false`, the relationship will not be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-sort" href="#name-destination-sort">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sort
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A sort statement to be applied when loading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-could_be_related_at_creation?" href="#name-destination-could_be_related_at_creation?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
could_be_related_at_creation?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not related values may exist for this relationship at creation.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-violation_message" href="#name-destination-violation_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
violation_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on destroy.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Relationships.HasMany`
|
|
|
|
## relationships.many_to_many
|
|
```elixir
|
|
many_to_many name, destination
|
|
```
|
|
|
|
|
|
Declares a `many_to_many` relationship. Many to many relationships require a join resource.
|
|
|
|
A join resource is a resource that consists of a relationship to the source and destination of the many to many.
|
|
|
|
See the [relationships guide](/documentation/topics/relationships.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
# In a resource called `Word`
|
|
many_to_many :books, Book do
|
|
through BookWord
|
|
source_attribute :text
|
|
source_attribute_on_join_resource :word_text
|
|
destination_attribute :id
|
|
destination_attribute_on_join_resource :book_id
|
|
end
|
|
|
|
# And in `BookWord` (the join resource)
|
|
belongs_to :book, Book, primary_key?: true, allow_nil?: false
|
|
belongs_to :word, Word, primary_key?: true, allow_nil?: false
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-source_attribute_on_join_resource" href="#name-destination-source_attribute_on_join_resource">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source_attribute_on_join_resource
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute on the join resource that should line up with `source_attribute` on this resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination_attribute_on_join_resource" href="#name-destination-destination_attribute_on_join_resource">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination_attribute_on_join_resource
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute on the join resource that should line up with `destination_attribute` on the related resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-through" href="#name-destination-through">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
through
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The resource to use as the join resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-join_relationship" href="#name-destination-join_relationship">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
join_relationship
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The has_many relationship to the join resource. Defaults to <relationship_name>_join_assoc
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-name" href="#name-destination-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination" href="#name-destination-destination">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-description" href="#name-destination-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination_attribute" href="#name-destination-destination_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:id</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute on the related resource that should match the `source_attribute` configured on this resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-validate_destination_attribute?" href="#name-destination-validate_destination_attribute?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validate_destination_attribute?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to validate that the destination field exists on the destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-source_attribute" href="#name-destination-source_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:id</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field on this resource that should match the `destination_attribute` on the related resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-relationship_context" href="#name-destination-relationship_context">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_context
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Context to be set on any queries or changesets generated for managing or querying this relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-private?" href="#name-destination-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-not_found_message" href="#name-destination-not_found_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
not_found_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on update or create, or when managing relationships.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-writable?" href="#name-destination-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship may be managed.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-read_action" href="#name-destination-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action on the destination resource to use when loading data and filtering.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-api" href="#name-destination-api">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
api
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The API module to use when working with the related entity.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filter" href="#name-destination-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to be applied when reading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filterable?" href="#name-destination-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `false`, the relationship will not be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-sort" href="#name-destination-sort">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sort
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A sort statement to be applied when loading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-could_be_related_at_creation?" href="#name-destination-could_be_related_at_creation?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
could_be_related_at_creation?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not related values may exist for this relationship at creation.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-violation_message" href="#name-destination-violation_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
violation_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on destroy.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Relationships.ManyToMany`
|
|
|
|
## relationships.belongs_to
|
|
```elixir
|
|
belongs_to name, destination
|
|
```
|
|
|
|
|
|
Declares a `belongs_to` relationship. In a relational database, the foreign key would be on the *source* table.
|
|
|
|
This creates a field on the resource with the corresponding name and type, unless `define_attribute?: false` is provided.
|
|
|
|
See the [relationships guide](/documentation/topics/relationships.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
# In a resource called `Word`
|
|
belongs_to :dictionary_entry, DictionaryEntry do
|
|
source_attribute :text,
|
|
destination_attribute :word_text
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-primary_key?" href="#name-destination-primary_key?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary_key?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether the generated attribute is, or is part of, the primary key of a resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-allow_nil?" href="#name-destination-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether this relationship must always be present, e.g: must be included on creation, and never removed (it may be modified). The generated attribute will not allow nil values.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-attribute_writable?" href="#name-destination-attribute_writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
attribute_writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether the generated attribute will be marked as public & writable.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-define_attribute?" href="#name-destination-define_attribute?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
define_attribute?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `false` an attribute is not created on the resource for this relationship, and one must be manually added in `attributes`, invalidating many other options.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-attribute_type" href="#name-destination-attribute_type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
attribute_type
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:uuid</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the generated created attribute. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-name" href="#name-destination-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination" href="#name-destination-destination">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-description" href="#name-destination-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the relationship
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-destination_attribute" href="#name-destination-destination_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
destination_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:id</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The attribute on the related resource that should match the `source_attribute` configured on this resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-validate_destination_attribute?" href="#name-destination-validate_destination_attribute?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validate_destination_attribute?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not to validate that the destination field exists on the destination resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-source_attribute" href="#name-destination-source_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
source_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field on this resource that should match the `destination_attribute` on the related resource. - Defaults to <name>_id
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-relationship_context" href="#name-destination-relationship_context">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_context
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Context to be set on any queries or changesets generated for managing or querying this relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-private?" href="#name-destination-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-not_found_message" href="#name-destination-not_found_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
not_found_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on update or create, or when managing relationships.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-writable?" href="#name-destination-writable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
writable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the relationship may be managed.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-read_action" href="#name-destination-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action on the destination resource to use when loading data and filtering.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-api" href="#name-destination-api">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
api
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The API module to use when working with the related entity.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filter" href="#name-destination-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to be applied when reading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-filterable?" href="#name-destination-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `false`, the relationship will not be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-sort" href="#name-destination-sort">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sort
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A sort statement to be applied when loading the relationship.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-destination-violation_message" href="#name-destination-violation_message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
violation_message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A message to show if there is a conflict with this relationship in the database on destroy.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Relationships.BelongsTo`
|
|
|
|
|
|
|
|
|
|
## actions
|
|
A section for declaring resource actions.
|
|
|
|
All manipulation of data through the underlying data layer happens through actions.
|
|
There are four types of action: `create`, `read`, `update`, and `destroy`. You may
|
|
recognize these from the acronym `CRUD`. You can have multiple actions of the same
|
|
type, as long as they have different names. This is the primary mechanism for customizing
|
|
your resources to conform to your business logic. It is normal and expected to have
|
|
multiple actions of each type in a large application.
|
|
|
|
|
|
### Nested DSLs
|
|
* [action](#actions-action)
|
|
* argument
|
|
* [create](#actions-create)
|
|
* change
|
|
* validate
|
|
* argument
|
|
* metadata
|
|
* [read](#actions-read)
|
|
* argument
|
|
* prepare
|
|
* pagination
|
|
* metadata
|
|
* [update](#actions-update)
|
|
* change
|
|
* validate
|
|
* metadata
|
|
* argument
|
|
* [destroy](#actions-destroy)
|
|
* change
|
|
* validate
|
|
* metadata
|
|
* argument
|
|
|
|
|
|
### Examples
|
|
```
|
|
actions do
|
|
create :signup do
|
|
argument :password, :string
|
|
argument :password_confirmation, :string
|
|
validate confirm(:password, :password_confirmation)
|
|
change {MyApp.HashPassword, []} # A custom implemented Change
|
|
end
|
|
|
|
read :me do
|
|
# An action that auto filters to only return the user for the current user
|
|
filter [id: actor(:id)]
|
|
end
|
|
|
|
update :update do
|
|
accept [:first_name, :last_name]
|
|
end
|
|
|
|
destroy do
|
|
change set_attribute(:deleted_at, &DateTime.utc_now/0)
|
|
# This tells it that even though this is a delete action, it
|
|
# should be treated like an update because `deleted_at` is set.
|
|
# This should be coupled with a `base_filter` on the resource
|
|
# or with the read actions having a `filter` for `is_nil: :deleted_at`
|
|
soft? true
|
|
end
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="actions-defaults" href="#actions-defaults">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
defaults
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(:create | :read | :update | :destroy)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Creates a simple action of each specified type, with the same name as the type. These will be `primary?` unless one already exists for that type. Embedded resources, however, have a default of all resource types.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="actions-default_accept" href="#actions-default_accept">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default_accept
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value for the `accept` option for each action. Defaults to all public attributes.
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
## actions.action
|
|
```elixir
|
|
action name, returns
|
|
```
|
|
|
|
|
|
Declares a generic action. A combination of arguments, a return type and a run function.
|
|
|
|
For calling this action, see the `Ash.Api` documentation.
|
|
|
|
|
|
### Nested DSLs
|
|
* [argument](#actions-action-argument)
|
|
|
|
|
|
### Examples
|
|
```
|
|
action :top_user_emails, {:array, :string} do
|
|
argument :limit, :integer, default: 10, allow_nil?: false
|
|
run fn input, context ->
|
|
with {:ok, top_users} <- top_users(input.limit) do
|
|
{:ok, Enum.map(top_users, &(&1.email))}
|
|
end
|
|
end
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-name" href="#name-returns-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-returns" href="#name-returns-returns">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
returns
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The return type of the action. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-constraints" href="#name-returns-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints for the return type. See the [constriants topic](/documentation/topics/constraints.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-allow_nil?" href="#name-returns-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the action can return nil. Unlike attributes & arguments, this defaults to `false`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-run" href="#name-returns-run">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
run
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-primary?" href="#name-returns-primary?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not this action should be used when no action is specified by the caller.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-description" href="#name-returns-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-transaction?" href="#name-returns-transaction?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
transaction?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the action should be run in transactions. Reads default to false, while create/update/destroy actions default to `true`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-returns-touches_resources" href="#name-returns-touches_resources">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
touches_resources
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of resources that the action may touch, used when building transactions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
## actions.action.argument
|
|
```elixir
|
|
argument name, type
|
|
```
|
|
|
|
|
|
Declares an argument on the action
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
argument :password_confirmation, :string
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the argument
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the argument. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the argument.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more information, see [the constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value may be nil (or may be not provided). If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-private?" href="#name-type-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument should be suppliable by the client.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-sensitive?" href="#name-type-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value contains sensitive information, like PII. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the argument to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Argument`
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Action`
|
|
|
|
## actions.create
|
|
```elixir
|
|
create name
|
|
```
|
|
|
|
|
|
Declares a `create` action. For calling this action, see the `Ash.Api` documentation.
|
|
|
|
|
|
### Nested DSLs
|
|
* [change](#actions-create-change)
|
|
* [validate](#actions-create-validate)
|
|
* [argument](#actions-create-argument)
|
|
* [metadata](#actions-create-metadata)
|
|
|
|
|
|
### Examples
|
|
```
|
|
create :register do
|
|
primary? true
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-allow_nil_input" href="#name-allow_nil_input">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil_input
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of attributes that would normally be required, but should not be for this action. They will still be validated just before the record is created.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-manual" href="#name-manual">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Override the creation behavior. Accepts a module or module and opts, or a function that takes the changeset and context. See the [manual actions guide](/documentation/topics/manual-actions.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-upsert?" href="#name-upsert?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
upsert?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Forces all uses of this action to be treated as an upsert.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-upsert_identity" href="#name-upsert_identity">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
upsert_identity
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The identity to use for the upsert. Cannot be overriden by the caller. Ignored if `upsert?` is not set to `true`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-upsert_fields" href="#name-upsert_fields">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
upsert_fields
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The fields to overwrite in the case of an upsert. If not provided, all fields except for fields set by defaults will be overwritten.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary?" href="#name-primary?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not this action should be used when no action is specified by the caller.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-transaction?" href="#name-transaction?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
transaction?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the action should be run in transactions. Reads default to false, while create/update/destroy actions default to `true`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-touches_resources" href="#name-touches_resources">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
touches_resources
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of resources that the action may touch, used when building transactions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-accept" href="#name-accept">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
accept
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:all | list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The list of attributes to accept. Defaults to all attributes on the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-delay_global_validations?" href="#name-delay_global_validations?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
delay_global_validations?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If true, global validations will be done in a `before_action` hook, regardless of their configuration on the resource.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-skip_global_validations?" href="#name-skip_global_validations?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
skip_global_validations?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If true, global validations will be skipped. Useful for manual actions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-reject" href="#name-reject">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
reject
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:all | list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of attributes not to accept. If this is specified along with `accept`, these are removed from the `accept` list.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-require_attributes" href="#name-require_attributes">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
require_attributes
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of attributes that would normally `allow_nil?`, to require for this action. No need to include attributes that already do not allow nil?
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-error_handler" href="#name-error_handler">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
error_handler
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">mfa</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Sets the error handler on the changeset. See `Ash.Changeset.handle_errors/2` for more
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-manual?" href="#name-manual?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Instructs Ash to *skip* the actual update/create/destroy step at the data layer. See the [manual actions guide](/documentation/topics/manual-actions.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
## actions.create.change
|
|
```elixir
|
|
change change
|
|
```
|
|
|
|
|
|
A change to be applied to the changeset.
|
|
|
|
See `Ash.Resource.Change` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
change relate_actor(:reporter)
|
|
```
|
|
|
|
```
|
|
change {MyCustomChange, :foo}
|
|
```
|
|
|
|
|
|
|
|
### Arguments
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-change" href="#change-change">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
change
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module and options for a change. Also accepts a function that takes the changeset and the context. See `Ash.Resource.Change.Builtins` for builtin changes.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-only_when_valid?" href="#change-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the change should only be run on valid changes. By default, all changes are run unless stated otherwise here.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-description" href="#change-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the change
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-where" href="#change-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. These validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Change`
|
|
|
|
## actions.create.validate
|
|
```elixir
|
|
validate validation
|
|
```
|
|
|
|
|
|
Declares a validation to be applied to the changeset.
|
|
|
|
See `Ash.Resource.Validation` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
validate changing(:email)
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-validation" href="#validation-validation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module (or module and opts) that implements the `Ash.Resource.Validation` behaviour. Also accepts a one argument function that takes the changeset.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-where" href="#validation-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module) | (any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. Any of these validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-only_when_valid?" href="#validation-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the validation should only run on valid changes. Useful for expensive validations or validations that depend on valid data.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-message" href="#validation-message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If provided, overrides any message set by the validation error
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-description" href="#validation-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the validation
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-before_action?" href="#validation-before_action?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
before_action?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `true`, the validation will be run in a before_action hook
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Validation`
|
|
|
|
## actions.create.argument
|
|
```elixir
|
|
argument name, type
|
|
```
|
|
|
|
|
|
Declares an argument on the action
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
argument :password_confirmation, :string
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the argument
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the argument. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the argument.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more information, see [the constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value may be nil (or may be not provided). If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-private?" href="#name-type-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument should be suppliable by the client.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-sensitive?" href="#name-type-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value contains sensitive information, like PII. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the argument to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Argument`
|
|
|
|
## actions.create.metadata
|
|
```elixir
|
|
metadata name, type
|
|
```
|
|
|
|
|
|
A special kind of attribute that is only added to specific actions. Nothing sets this value, it must be set in a custom
|
|
change via `Ash.Resource.Info.put_metadata/3`.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
metadata :api_token, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
```
|
|
metadata :operation_id, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the metadata. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Type constraints on the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the metadata.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the metadata may return `nil`
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the metadata to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Metadata`
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Create`
|
|
|
|
## actions.read
|
|
```elixir
|
|
read name
|
|
```
|
|
|
|
|
|
Declares a `read` action. For calling this action, see the `Ash.Api` documentation.
|
|
|
|
|
|
### Nested DSLs
|
|
* [argument](#actions-read-argument)
|
|
* [prepare](#actions-read-prepare)
|
|
* [pagination](#actions-read-pagination)
|
|
* [metadata](#actions-read-metadata)
|
|
|
|
|
|
### Examples
|
|
```
|
|
read :read_all do
|
|
primary? true
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-filter" href="#name-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter template that will be applied whenever the action is used. See `Ash.Filter` for more on templates
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-manual" href="#name-manual">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Delegates running of the query to the provided module. Accepts a module or module and opts, or a function that takes the changeset and context. See the [manual actions guide](/documentation/topics/manual-actions.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-get?" href="#name-get?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
get?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Expresses that this action innately only returns a single result. Used by extensions to validate and/or modify behavior. Causes code interfaces to return a single value instead of a list. See the [code interface guide](/documentation/topics/code-interface.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-modify_query" href="#name-modify_query">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
modify_query
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">mfa | (any, any -> any)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Allows direct manipulation of the data layer query via an MFA. The ash query and the data layer query will be provided as additional arguments. The result must be `{:ok, new_data_layer_query} | {:error, error}`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-get_by" href="#name-get_by">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
get_by
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A helper to automatically generate a "get by X" action. Sets `get?` to true, add args for each of the specified fields, and adds a filter for each of the arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary?" href="#name-primary?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not this action should be used when no action is specified by the caller.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-transaction?" href="#name-transaction?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
transaction?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the action should be run in transactions. Reads default to false, while create/update/destroy actions default to `true`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-touches_resources" href="#name-touches_resources">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
touches_resources
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of resources that the action may touch, used when building transactions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
## actions.read.argument
|
|
```elixir
|
|
argument name, type
|
|
```
|
|
|
|
|
|
Declares an argument on the action
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
argument :password_confirmation, :string
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the argument
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the argument. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the argument.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more information, see [the constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value may be nil (or may be not provided). If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-private?" href="#name-type-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument should be suppliable by the client.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-sensitive?" href="#name-type-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value contains sensitive information, like PII. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the argument to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Argument`
|
|
|
|
## actions.read.prepare
|
|
```elixir
|
|
prepare preparation
|
|
```
|
|
|
|
|
|
Declares a preparation, which can be used to prepare a query for a read action.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
prepare build(sort: [:foo, :bar])
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="preparation-preparation" href="#preparation-preparation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
preparation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module and options for a preparation. Also accepts functions take the query and the context.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Preparation`
|
|
|
|
## actions.read.pagination
|
|
|
|
|
|
Adds pagination options to a resource
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="keyset?" href="#keyset?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
keyset?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not keyset based pagination is supported
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="offset?" href="#offset?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
offset?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not offset based pagination is supported
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="default_limit" href="#default_limit">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default_limit
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">pos_integer</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default page size to apply, if one is not supplied
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="countable" href="#countable">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
countable
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true | false | :by_default</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether not a returned page will have a full count of all records. Use `:by_default` to do it automatically.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="max_page_size" href="#max_page_size">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
max_page_size
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">pos_integer</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">250</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The maximum amount of records that can be requested in a single page
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="required?" href="#required?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
required?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not pagination can be disabled. Only relevant if some pagination configuration is supplied.
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Read.Pagination`
|
|
|
|
## actions.read.metadata
|
|
```elixir
|
|
metadata name, type
|
|
```
|
|
|
|
|
|
A special kind of attribute that is only added to specific actions. Nothing sets this value, it must be set in a custom
|
|
change via `Ash.Resource.Info.put_metadata/3`.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
metadata :api_token, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
```
|
|
metadata :operation_id, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the metadata. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Type constraints on the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the metadata.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the metadata may return `nil`
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the metadata to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Metadata`
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Read`
|
|
|
|
## actions.update
|
|
```elixir
|
|
update name
|
|
```
|
|
|
|
|
|
Declares a `update` action. For calling this action, see the `Ash.Api` documentation.
|
|
|
|
|
|
### Nested DSLs
|
|
* [change](#actions-update-change)
|
|
* [validate](#actions-update-validate)
|
|
* [metadata](#actions-update-metadata)
|
|
* [argument](#actions-update-argument)
|
|
|
|
|
|
### Examples
|
|
```
|
|
update :flag_for_review, primary?: true
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-manual" href="#name-manual">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Override the update behavior. Accepts a module or module and opts, or a function that takes the changeset and context. See the [manual actions guide](/documentation/topics/manual-actions.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary?" href="#name-primary?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not this action should be used when no action is specified by the caller.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-transaction?" href="#name-transaction?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
transaction?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the action should be run in transactions. Reads default to false, while create/update/destroy actions default to `true`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-touches_resources" href="#name-touches_resources">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
touches_resources
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of resources that the action may touch, used when building transactions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-accept" href="#name-accept">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
accept
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:all | list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The list of attributes to accept. Defaults to all attributes on the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-delay_global_validations?" href="#name-delay_global_validations?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
delay_global_validations?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If true, global validations will be done in a `before_action` hook, regardless of their configuration on the resource.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-skip_global_validations?" href="#name-skip_global_validations?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
skip_global_validations?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If true, global validations will be skipped. Useful for manual actions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-reject" href="#name-reject">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
reject
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:all | list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of attributes not to accept. If this is specified along with `accept`, these are removed from the `accept` list.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-require_attributes" href="#name-require_attributes">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
require_attributes
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of attributes that would normally `allow_nil?`, to require for this action. No need to include attributes that already do not allow nil?
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-error_handler" href="#name-error_handler">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
error_handler
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">mfa</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Sets the error handler on the changeset. See `Ash.Changeset.handle_errors/2` for more
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-manual?" href="#name-manual?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Instructs Ash to *skip* the actual update/create/destroy step at the data layer. See the [manual actions guide](/documentation/topics/manual-actions.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
## actions.update.change
|
|
```elixir
|
|
change change
|
|
```
|
|
|
|
|
|
A change to be applied to the changeset.
|
|
|
|
See `Ash.Resource.Change` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
change relate_actor(:reporter)
|
|
```
|
|
|
|
```
|
|
change {MyCustomChange, :foo}
|
|
```
|
|
|
|
|
|
|
|
### Arguments
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-change" href="#change-change">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
change
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module and options for a change. Also accepts a function that takes the changeset and the context. See `Ash.Resource.Change.Builtins` for builtin changes.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-only_when_valid?" href="#change-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the change should only be run on valid changes. By default, all changes are run unless stated otherwise here.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-description" href="#change-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the change
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-where" href="#change-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. These validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Change`
|
|
|
|
## actions.update.validate
|
|
```elixir
|
|
validate validation
|
|
```
|
|
|
|
|
|
Declares a validation to be applied to the changeset.
|
|
|
|
See `Ash.Resource.Validation` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
validate changing(:email)
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-validation" href="#validation-validation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module (or module and opts) that implements the `Ash.Resource.Validation` behaviour. Also accepts a one argument function that takes the changeset.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-where" href="#validation-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module) | (any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. Any of these validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-only_when_valid?" href="#validation-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the validation should only run on valid changes. Useful for expensive validations or validations that depend on valid data.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-message" href="#validation-message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If provided, overrides any message set by the validation error
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-description" href="#validation-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the validation
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-before_action?" href="#validation-before_action?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
before_action?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `true`, the validation will be run in a before_action hook
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Validation`
|
|
|
|
## actions.update.metadata
|
|
```elixir
|
|
metadata name, type
|
|
```
|
|
|
|
|
|
A special kind of attribute that is only added to specific actions. Nothing sets this value, it must be set in a custom
|
|
change via `Ash.Resource.Info.put_metadata/3`.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
metadata :api_token, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
```
|
|
metadata :operation_id, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the metadata. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Type constraints on the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the metadata.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the metadata may return `nil`
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the metadata to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Metadata`
|
|
|
|
## actions.update.argument
|
|
```elixir
|
|
argument name, type
|
|
```
|
|
|
|
|
|
Declares an argument on the action
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
argument :password_confirmation, :string
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the argument
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the argument. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the argument.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more information, see [the constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value may be nil (or may be not provided). If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-private?" href="#name-type-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument should be suppliable by the client.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-sensitive?" href="#name-type-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value contains sensitive information, like PII. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the argument to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Argument`
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Update`
|
|
|
|
## actions.destroy
|
|
```elixir
|
|
destroy name
|
|
```
|
|
|
|
|
|
Declares a `destroy` action. For calling this action, see the `Ash.Api` documentation.
|
|
|
|
|
|
### Nested DSLs
|
|
* [change](#actions-destroy-change)
|
|
* [validate](#actions-destroy-validate)
|
|
* [metadata](#actions-destroy-metadata)
|
|
* [argument](#actions-destroy-argument)
|
|
|
|
|
|
### Examples
|
|
```
|
|
destroy :soft_delete do
|
|
primary? true
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-soft?" href="#name-soft?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
soft?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If specified, the destroy action behaves as an update internally
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-manual" href="#name-manual">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Override the update behavior. Accepts a module or module and opts, or a function that takes the changeset and context. See the [manual actions guide](/documentation/topics/manual-actions.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-primary?" href="#name-primary?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
primary?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not this action should be used when no action is specified by the caller.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-description" href="#name-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the action
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-transaction?" href="#name-transaction?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
transaction?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the action should be run in transactions. Reads default to false, while create/update/destroy actions default to `true`.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-touches_resources" href="#name-touches_resources">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
touches_resources
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of resources that the action may touch, used when building transactions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-accept" href="#name-accept">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
accept
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:all | list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The list of attributes to accept. Defaults to all attributes on the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-delay_global_validations?" href="#name-delay_global_validations?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
delay_global_validations?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If true, global validations will be done in a `before_action` hook, regardless of their configuration on the resource.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-skip_global_validations?" href="#name-skip_global_validations?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
skip_global_validations?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If true, global validations will be skipped. Useful for manual actions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-reject" href="#name-reject">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
reject
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:all | list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of attributes not to accept. If this is specified along with `accept`, these are removed from the `accept` list.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-require_attributes" href="#name-require_attributes">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
require_attributes
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of attributes that would normally `allow_nil?`, to require for this action. No need to include attributes that already do not allow nil?
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-error_handler" href="#name-error_handler">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
error_handler
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">mfa</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Sets the error handler on the changeset. See `Ash.Changeset.handle_errors/2` for more
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-manual?" href="#name-manual?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
manual?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Instructs Ash to *skip* the actual update/create/destroy step at the data layer. See the [manual actions guide](/documentation/topics/manual-actions.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
## actions.destroy.change
|
|
```elixir
|
|
change change
|
|
```
|
|
|
|
|
|
A change to be applied to the changeset.
|
|
|
|
See `Ash.Resource.Change` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
change relate_actor(:reporter)
|
|
```
|
|
|
|
```
|
|
change {MyCustomChange, :foo}
|
|
```
|
|
|
|
|
|
|
|
### Arguments
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-change" href="#change-change">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
change
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module and options for a change. Also accepts a function that takes the changeset and the context. See `Ash.Resource.Change.Builtins` for builtin changes.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-only_when_valid?" href="#change-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the change should only be run on valid changes. By default, all changes are run unless stated otherwise here.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-description" href="#change-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the change
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-where" href="#change-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. These validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Change`
|
|
|
|
## actions.destroy.validate
|
|
```elixir
|
|
validate validation
|
|
```
|
|
|
|
|
|
Declares a validation to be applied to the changeset.
|
|
|
|
See `Ash.Resource.Validation` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
validate changing(:email)
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-validation" href="#validation-validation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module (or module and opts) that implements the `Ash.Resource.Validation` behaviour. Also accepts a one argument function that takes the changeset.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-where" href="#validation-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module) | (any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. Any of these validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-only_when_valid?" href="#validation-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the validation should only run on valid changes. Useful for expensive validations or validations that depend on valid data.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-message" href="#validation-message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If provided, overrides any message set by the validation error
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-description" href="#validation-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the validation
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-before_action?" href="#validation-before_action?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
before_action?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `true`, the validation will be run in a before_action hook
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Validation`
|
|
|
|
## actions.destroy.metadata
|
|
```elixir
|
|
metadata name, type
|
|
```
|
|
|
|
|
|
A special kind of attribute that is only added to specific actions. Nothing sets this value, it must be set in a custom
|
|
change via `Ash.Resource.Info.put_metadata/3`.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
metadata :api_token, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
```
|
|
metadata :operation_id, :string, allow_nil?: false
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the metadata. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Type constraints on the metadata
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the metadata.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the metadata may return `nil`
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the metadata to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Metadata`
|
|
|
|
## actions.destroy.argument
|
|
```elixir
|
|
argument name, type
|
|
```
|
|
|
|
|
|
Declares an argument on the action
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
argument :password_confirmation, :string
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the argument
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the argument. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-description" href="#name-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the argument.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. For more information, see [the constraints topic](/documentation/topics/constraints.md).
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value may be nil (or may be not provided). If nil value is given error is raised.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-private?" href="#name-type-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument should be suppliable by the client.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-sensitive?" href="#name-type-sensitive?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sensitive?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value contains sensitive information, like PII. See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The default value for the argument to take. It can be a zero argument function e.g `&MyMod.my_fun/0` or a value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Argument`
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Actions.Destroy`
|
|
|
|
|
|
|
|
|
|
## code_interface
|
|
Functions that will be defined on the Api module to interact with this resource. See the [code interface guide](/documentation/topics/code-interface.md) for more.
|
|
|
|
|
|
### Nested DSLs
|
|
* [define](#code_interface-define)
|
|
* [define_calculation](#code_interface-define_calculation)
|
|
|
|
|
|
### Examples
|
|
```
|
|
code_interface do
|
|
define_for MyApp.Api
|
|
define :create_user, action: :create
|
|
define :get_user_by_id, action: :get_by_id, args: [:id], get?: true
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="code_interface-define_for" href="#code_interface-define_for">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
define_for
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Defines the code interface on the resource module directly, using the provided Api.
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
## code_interface.define
|
|
```elixir
|
|
define name
|
|
```
|
|
|
|
|
|
Defines a function with the corresponding name and arguments. See the [code interface guide](/documentation/topics/code-interface.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
define :get_user_by_id, action: :get_by_id, args: [:id], get?: true
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the function that will be defined
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-action" href="#name-action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the action that will be called. Defaults to the same name as the function.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-args" href="#name-args">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
args
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom | {:optional, atom})</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Map specific arguments to named inputs. Can provide any argument/attributes that the action allows.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-not_found_error?" href="#name-not_found_error?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
not_found_error?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the action or interface is configured with `get?: true`, this determines whether or not an error is raised or `nil` is returned.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-get?" href="#name-get?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
get?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Expects to only receive a single result from a read action, and returns a single result instead of a list. Ignored for other action types.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-get_by" href="#name-get_by">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
get_by
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Takes a list of fields and adds those fields as arguments, which will then be used to filter. Sets `get?` to true automatically. Ignored for non-read actions.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-get_by_identity" href="#name-get_by_identity">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
get_by_identity
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Only relevant for read actions. Takes an identity, and gets its field list, performing the same logic as `get_by` once it has the list of fields.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Interface`
|
|
|
|
## code_interface.define_calculation
|
|
```elixir
|
|
define_calculation name
|
|
```
|
|
|
|
|
|
Defines a function with the corresponding name and arguments, that evaluates a calculation. Use `:_record` to take an instance of a record. See the [code interface guide](/documentation/topics/code-interface.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
define_calculation :referral_link, args: [:id]
|
|
```
|
|
|
|
```
|
|
define_calculation :referral_link, args: [{:arg, :id}, {:ref, :id}]
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-name" href="#name-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the function that will be defined
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-calculation" href="#name-calculation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
calculation
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the calculation that will be evaluated. Defaults to the same name as the function.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-args" href="#name-args">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
args
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Supply field or argument values referenced by the calculation, in the form of :name, `{:arg, :name}` and/or `{:ref, :name}`. See the [code interface guide](/documentation/topics/code-interface.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.CalculationInterface`
|
|
|
|
|
|
|
|
|
|
## resource
|
|
General resource configuration
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
resource do
|
|
description "A description of this resource"
|
|
base_filter [is_nil: :deleted_at]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-description" href="#resource-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A human readable description of the resource, to be used in generated documentation
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-base_filter" href="#resource-base_filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
base_filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter statement to be applied to any queries on the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-default_context" href="#resource-default_context">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default_context
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Default context to apply to any queries/changesets generated for this resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-trace_name" href="#resource-trace_name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
trace_name
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name to use in traces. Defaults to the short_name stringified. See the [monitoring guide](/documentation/topics/monitoring.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-short_name" href="#resource-short_name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
short_name
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A short identifier for the resource, which should be unique. See the [monitoring guide](/documentation/topics/monitoring.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-plural_name" href="#resource-plural_name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
plural_name
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A pluralized version of the resource short_name. May be used by generators or automated tooling.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-simple_notifiers" href="#resource-simple_notifiers">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
simple_notifiers
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(module)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of notifiers that require no DSL. Can be used to avoid compile time dependencies on notifiers
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="resource-require_primary_key?" href="#resource-require_primary_key?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
require_primary_key?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Allow the resource to be used without any primary key fields. Warning: this option is experimental, and should not be used unless you know what you're doing.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## identities
|
|
Unique identifiers for the resource
|
|
|
|
|
|
### Nested DSLs
|
|
* [identity](#identities-identity)
|
|
|
|
|
|
### Examples
|
|
```
|
|
identities do
|
|
identity :full_name, [:first_name, :last_name]
|
|
identity :email, [:email]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## identities.identity
|
|
```elixir
|
|
identity name, keys
|
|
```
|
|
|
|
|
|
Represents a unique constraint on the resource.
|
|
|
|
See the [identities guide](/documentation/topics/identities.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
identity :name, [:name]
|
|
```
|
|
|
|
```
|
|
identity :full_name, [:first_name, :last_name]
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-keys-name" href="#name-keys-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the identity.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-keys-keys" href="#name-keys-keys">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
keys
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The names of the attributes that uniquely identify this resource.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-keys-eager_check_with" href="#name-keys-eager_check_with">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
eager_check_with
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validates that the unique identity provided is unique at validation time, outside of any transactions, using the api module provided.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-keys-pre_check_with" href="#name-keys-pre_check_with">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
pre_check_with
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validates that the unique identity provided is unique in a before_action hook.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-keys-description" href="#name-keys-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the identity
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-keys-message" href="#name-keys-message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An error message to use when the unique identity would be violated
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Identity`
|
|
|
|
|
|
|
|
|
|
## changes
|
|
Declare changes that occur on create/update/destroy actions against the resource
|
|
|
|
See `Ash.Resource.Change` for more.
|
|
|
|
|
|
### Nested DSLs
|
|
* [change](#changes-change)
|
|
|
|
|
|
### Examples
|
|
```
|
|
changes do
|
|
change {Mod, [foo: :bar]}
|
|
change set_context(%{some: :context})
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## changes.change
|
|
```elixir
|
|
change change
|
|
```
|
|
|
|
|
|
A change to be applied to the changeset.
|
|
|
|
See `Ash.Resource.Change` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
change relate_actor(:reporter)
|
|
```
|
|
|
|
```
|
|
change {MyCustomChange, :foo}
|
|
```
|
|
|
|
|
|
|
|
### Arguments
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-change" href="#change-change">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
change
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module and options for a change. Also accepts a function that takes the changeset and the context. See `Ash.Resource.Change.Builtins` for builtin changes.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-on" href="#change-on">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
on
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(:create | :update | :destroy) | :create | :update | :destroy</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[:create, :update]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The action types the validation should run on. Destroy actions are omitted by default as most changes don't make sense for a destroy.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-only_when_valid?" href="#change-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the change should only be run on valid changes. By default, all changes are run unless stated otherwise here.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-description" href="#change-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the change
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="change-where" href="#change-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. These validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Change`
|
|
|
|
|
|
|
|
|
|
## preparations
|
|
Declare preparations that occur on all read actions for a given resource
|
|
|
|
|
|
### Nested DSLs
|
|
* [prepare](#preparations-prepare)
|
|
|
|
|
|
### Examples
|
|
```
|
|
preparations do
|
|
prepare {Mod, [foo: :bar]}
|
|
prepare set_context(%{some: :context})
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## preparations.prepare
|
|
```elixir
|
|
prepare preparation
|
|
```
|
|
|
|
|
|
Declares a preparation, which can be used to prepare a query for a read action.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
prepare build(sort: [:foo, :bar])
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="preparation-preparation" href="#preparation-preparation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
preparation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module and options for a preparation. Also accepts functions take the query and the context.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Preparation`
|
|
|
|
|
|
|
|
|
|
## validations
|
|
Declare validations prior to performing actions against the resource
|
|
|
|
|
|
### Nested DSLs
|
|
* [validate](#validations-validate)
|
|
|
|
|
|
### Examples
|
|
```
|
|
validations do
|
|
validate {Mod, [foo: :bar]}
|
|
validate at_least_one_of_present([:first_name, :last_name])
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## validations.validate
|
|
```elixir
|
|
validate validation
|
|
```
|
|
|
|
|
|
Declares a validation for creates and updates.
|
|
|
|
See `Ash.Resource.Change` for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
validate {Mod, [foo: :bar]}
|
|
```
|
|
|
|
```
|
|
validate at_least_one_of_present([:first_name, :last_name])
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-validation" href="#validation-validation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
validation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module (or module and opts) that implements the `Ash.Resource.Validation` behaviour. Also accepts a one argument function that takes the changeset.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-where" href="#validation-where">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
where
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list((any -> any) | module) | (any -> any) | module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Validations that should pass in order for this validation to apply. Any of these validations failing will result in this validation being ignored.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-on" href="#validation-on">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
on
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(:create | :update | :destroy) | :create | :update | :destroy</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[:create, :update]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The action types the validation should run on. Many validations don't make sense in the context of deletion, so by default it is not included.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-only_when_valid?" href="#validation-only_when_valid?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
only_when_valid?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If the validation should only run on valid changes. Useful for expensive validations or validations that depend on valid data.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-message" href="#validation-message">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
message
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If provided, overrides any message set by the validation error
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-description" href="#validation-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the validation
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="validation-before_action?" href="#validation-before_action?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
before_action?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If set to `true`, the validation will be run in a before_action hook
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Validation`
|
|
|
|
|
|
|
|
|
|
## aggregates
|
|
Declare named aggregates on the resource.
|
|
|
|
These are aggregates that can be loaded only by name using `Ash.Query.load/2`.
|
|
They are also available as top level fields on the resource.
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
### Nested DSLs
|
|
* [count](#aggregates-count)
|
|
* [exists](#aggregates-exists)
|
|
* [first](#aggregates-first)
|
|
* [sum](#aggregates-sum)
|
|
* [list](#aggregates-list)
|
|
* [max](#aggregates-max)
|
|
* [min](#aggregates-min)
|
|
* [avg](#aggregates-avg)
|
|
* [custom](#aggregates-custom)
|
|
|
|
|
|
### Examples
|
|
```
|
|
aggregates do
|
|
count :assigned_ticket_count, :reported_tickets do
|
|
filter [active: true]
|
|
end
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## aggregates.count
|
|
```elixir
|
|
count name, relationship_path
|
|
```
|
|
|
|
|
|
Declares a named count aggregate on the resource
|
|
|
|
Supports `filter`, but not `sort` (because that wouldn't affect the count)
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
count :assigned_ticket_count, :assigned_tickets do
|
|
filter [active: true]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-name" href="#name-relationship_path-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-relationship_path" href="#name-relationship_path-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-kind" href="#name-relationship_path-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-uniq?" href="#name-relationship_path-uniq?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
uniq?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not to count unique values only
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-read_action" href="#name-relationship_path-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field" href="#name-relationship_path-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-filter" href="#name-relationship_path-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-description" href="#name-relationship_path-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-default" href="#name-relationship_path-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-private?" href="#name-relationship_path-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-filterable?" href="#name-relationship_path-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-authorize?" href="#name-relationship_path-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.exists
|
|
```elixir
|
|
exists name, relationship_path
|
|
```
|
|
|
|
|
|
Declares a named `exists` aggregate on the resource
|
|
|
|
Supports `filter`, but not `sort` (because that wouldn't affect if something exists)
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
exists :has_ticket, :assigned_tickets
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-name" href="#name-relationship_path-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-relationship_path" href="#name-relationship_path-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-kind" href="#name-relationship_path-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-read_action" href="#name-relationship_path-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-filter" href="#name-relationship_path-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-description" href="#name-relationship_path-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-default" href="#name-relationship_path-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-private?" href="#name-relationship_path-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-filterable?" href="#name-relationship_path-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-authorize?" href="#name-relationship_path-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.first
|
|
```elixir
|
|
first name, relationship_path, field
|
|
```
|
|
|
|
|
|
Declares a named `first` aggregate on the resource
|
|
|
|
First aggregates return the first value of the related record
|
|
that matches. Supports both `filter` and `sort`.
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
first :first_assigned_ticket_subject, :assigned_tickets, :subject do
|
|
filter [active: true]
|
|
sort [:subject]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-name" href="#name-relationship_path-field-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-relationship_path" href="#name-relationship_path-field-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-kind" href="#name-relationship_path-field-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-read_action" href="#name-relationship_path-field-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-field" href="#name-relationship_path-field-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filter" href="#name-relationship_path-field-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-sort" href="#name-relationship_path-field-sort">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sort
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A sort to be applied to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-description" href="#name-relationship_path-field-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-default" href="#name-relationship_path-field-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-private?" href="#name-relationship_path-field-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filterable?" href="#name-relationship_path-field-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-authorize?" href="#name-relationship_path-field-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.sum
|
|
```elixir
|
|
sum name, relationship_path, field
|
|
```
|
|
|
|
|
|
Declares a named `sum` aggregate on the resource
|
|
|
|
Supports `filter`, but not `sort` (because that wouldn't affect the sum)
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
sum :assigned_ticket_price_sum, :assigned_tickets, :price do
|
|
filter [active: true]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-name" href="#name-relationship_path-field-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-relationship_path" href="#name-relationship_path-field-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-kind" href="#name-relationship_path-field-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-read_action" href="#name-relationship_path-field-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-field" href="#name-relationship_path-field-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filter" href="#name-relationship_path-field-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-description" href="#name-relationship_path-field-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-default" href="#name-relationship_path-field-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-private?" href="#name-relationship_path-field-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filterable?" href="#name-relationship_path-field-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-authorize?" href="#name-relationship_path-field-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.list
|
|
```elixir
|
|
list name, relationship_path, field
|
|
```
|
|
|
|
|
|
Declares a named `list` aggregate on the resource.
|
|
|
|
A list aggregate selects the list of all values for the given field
|
|
and relationship combination.
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
list :assigned_ticket_prices, :assigned_tickets, :price do
|
|
filter [active: true]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-name" href="#name-relationship_path-field-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-relationship_path" href="#name-relationship_path-field-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-kind" href="#name-relationship_path-field-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-uniq?" href="#name-relationship_path-field-uniq?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
uniq?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not to count unique values only
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-read_action" href="#name-relationship_path-field-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-field" href="#name-relationship_path-field-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filter" href="#name-relationship_path-field-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-sort" href="#name-relationship_path-field-sort">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sort
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A sort to be applied to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-description" href="#name-relationship_path-field-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-default" href="#name-relationship_path-field-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-private?" href="#name-relationship_path-field-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filterable?" href="#name-relationship_path-field-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-authorize?" href="#name-relationship_path-field-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.max
|
|
```elixir
|
|
max name, relationship_path, field
|
|
```
|
|
|
|
|
|
Declares a named `max` aggregate on the resource
|
|
|
|
Supports `filter`, but not `sort` (because that wouldn't affect the max)
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
max :first_assigned_ticket_subject, :assigned_tickets, :severity do
|
|
filter [active: true]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-name" href="#name-relationship_path-field-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-relationship_path" href="#name-relationship_path-field-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-kind" href="#name-relationship_path-field-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-read_action" href="#name-relationship_path-field-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-field" href="#name-relationship_path-field-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filter" href="#name-relationship_path-field-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-description" href="#name-relationship_path-field-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-default" href="#name-relationship_path-field-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-private?" href="#name-relationship_path-field-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filterable?" href="#name-relationship_path-field-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-authorize?" href="#name-relationship_path-field-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.min
|
|
```elixir
|
|
min name, relationship_path, field
|
|
```
|
|
|
|
|
|
Declares a named `min` aggregate on the resource
|
|
|
|
Supports `filter`, but not `sort` (because that wouldn't affect the min)
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
min :first_assigned_ticket_subject, :assigned_tickets, :severity do
|
|
filter [active: true]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-name" href="#name-relationship_path-field-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-relationship_path" href="#name-relationship_path-field-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-kind" href="#name-relationship_path-field-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-read_action" href="#name-relationship_path-field-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-field" href="#name-relationship_path-field-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filter" href="#name-relationship_path-field-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-description" href="#name-relationship_path-field-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-default" href="#name-relationship_path-field-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-private?" href="#name-relationship_path-field-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filterable?" href="#name-relationship_path-field-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-authorize?" href="#name-relationship_path-field-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.avg
|
|
```elixir
|
|
avg name, relationship_path, field
|
|
```
|
|
|
|
|
|
Declares a named `avg` aggregate on the resource
|
|
|
|
Supports `filter`, but not `sort` (because that wouldn't affect the avg)
|
|
|
|
See the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
avg :assigned_ticket_price_sum, :assigned_tickets, :price do
|
|
filter [active: true]
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-name" href="#name-relationship_path-field-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-relationship_path" href="#name-relationship_path-field-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-kind" href="#name-relationship_path-field-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-read_action" href="#name-relationship_path-field-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-field" href="#name-relationship_path-field-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filter" href="#name-relationship_path-field-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-description" href="#name-relationship_path-field-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-default" href="#name-relationship_path-field-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-private?" href="#name-relationship_path-field-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-filterable?" href="#name-relationship_path-field-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-field-authorize?" href="#name-relationship_path-field-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
## aggregates.custom
|
|
```elixir
|
|
custom name, relationship_path, type
|
|
```
|
|
|
|
|
|
Declares a named `custom` aggregate on the resource
|
|
|
|
Supports `filter` and `sort`.
|
|
|
|
Custom aggregates provide an `implementation` which must implement data layer specific callbacks.
|
|
|
|
See the relevant data layer documentation and the [aggregates guide](/documentation/topics/aggregates.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
custom :author_names, :authors, :string do
|
|
implementation {StringAgg, delimiter: ","}
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-implementation" href="#name-relationship_path-type-implementation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
implementation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The module that implements the relevant data layer callbacks
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-type" href="#name-relationship_path-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the value returned by the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-name" href="#name-relationship_path-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to place the aggregate in
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-relationship_path" href="#name-relationship_path-type-relationship_path">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
relationship_path
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom) | atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The relationship or relationship path to use for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-kind" href="#name-relationship_path-type-kind">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
kind
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:count | :first | :sum | :list | :avg | :max | :min | :exists | :custom | {:custom, module}</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The kind of the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-read_action" href="#name-relationship_path-type-read_action">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
read_action
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The read action to use when building the aggregate. Defaults to the primary read action. Keep in mind this action must not have any required arguments.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-field" href="#name-relationship_path-type-field">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
field
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field to aggregate. Defaults to the first field in the primary key of the resource
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-filter" href="#name-relationship_path-type-filter">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filter
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A filter to apply to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-sort" href="#name-relationship_path-type-sort">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
sort
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A sort to be applied to the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-description" href="#name-relationship_path-type-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the aggregate
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-default" href="#name-relationship_path-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use in cases where nil would be used. Count defaults to `0`.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-private?" href="#name-relationship_path-type-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-filterable?" href="#name-relationship_path-type-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the aggregate should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-relationship_path-type-authorize?" href="#name-relationship_path-type-authorize?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
authorize?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Wether or not the aggregate query should authorize based on the target action, if the parent query is authorized. Requires filter checks on the target action.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Aggregate`
|
|
|
|
|
|
|
|
|
|
## calculations
|
|
Declare named calculations on the resource.
|
|
|
|
These are calculations that can be loaded only by name using `Ash.Query.load/2`.
|
|
They are also available as top level fields on the resource.
|
|
|
|
See the [calculations guide](/documentation/topics/calculations.md) for more.
|
|
|
|
|
|
### Nested DSLs
|
|
* [calculate](#calculations-calculate)
|
|
* argument
|
|
|
|
|
|
### Examples
|
|
```
|
|
calculations do
|
|
calculate :full_name, :string, MyApp.MyResource.FullName
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## calculations.calculate
|
|
```elixir
|
|
calculate name, type, calculation \ nil
|
|
```
|
|
|
|
|
|
Declares a named calculation on the resource.
|
|
|
|
Takes a module that must adopt the `Ash.Calculation` behaviour. See that module
|
|
for more information.
|
|
|
|
To ensure that the necessary fields are selected:
|
|
|
|
1.) Specifying the `select` option on a calculation in the resource.
|
|
2.) Define a `select/2` callback in the calculation module
|
|
3.) Set `always_select?` on the attribute in question
|
|
|
|
See the [calculations guide](/documentation/topics/calculations.md) for more.
|
|
|
|
|
|
### Nested DSLs
|
|
* [argument](#calculations-calculate-argument)
|
|
|
|
|
|
### Examples
|
|
`Ash.Calculation` implementation example:
|
|
```
|
|
calculate :full_name, :string, {MyApp.FullName, keys: [:first_name, :last_name]}, select: [:first_name, :last_name]
|
|
```
|
|
|
|
`expr/1` example:
|
|
```
|
|
calculate :full_name, :string, expr(first_name <> " " <> last_name)
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-name" href="#name-type-calculation-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The field name to use for the calculation value
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-type" href="#name-type-calculation-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the calculation. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-calculation" href="#name-type-calculation-calculation">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
calculation
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(any, any -> any) | module | `any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The `module`, `{module, opts}` or `expr(...)` to use for the calculation. Also accepts a function that takes *a single record* and produces the result.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-constraints" href="#name-type-calculation-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-description" href="#name-type-calculation-description">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
description
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">String.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An optional description for the calculation
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-private?" href="#name-type-calculation-private?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
private?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the calculation will appear in any interfaces created off of this resource, e.g AshJsonApi and AshGraphql See the [security guide](/documentation/topics/security.md) for more.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-select" href="#name-type-calculation-select">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
select
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">list(atom)</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A list of fields to ensure selected if the calculation is used.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-load" href="#name-type-calculation-load">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
load
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">`any`</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A load statement to be applied if the calculation is used.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-allow_nil?" href="#name-type-calculation-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the calculation can return nil.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-calculation-filterable?" href="#name-type-calculation-filterable?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
filterable?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean | :simple_equality</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the calculation should be usable in filters.
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
## calculations.calculate.argument
|
|
```elixir
|
|
argument name, type
|
|
```
|
|
|
|
|
|
An argument to be passed into the calculation's arguments map
|
|
|
|
See the [calculations guide](/documentation/topics/calculations.md) for more.
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
argument :params, :map do
|
|
default %{}
|
|
end
|
|
|
|
```
|
|
|
|
```
|
|
argument :retries, :integer do
|
|
allow_nil? false
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-name" href="#name-type-name">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
name
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The name of the argument
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-type" href="#name-type-type">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
type
|
|
</span>
|
|
</a>
|
|
<sup style="color: red">*</sup>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">module</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
The type of the argument. See `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-default" href="#name-type-default">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
default
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">(-> any) | mfa | any()</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
A default value to use for the argument if not provided
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_nil?" href="#name-type-allow_nil?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_nil?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">true</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the argument value may be nil (or may be not provided)
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-allow_expr?" href="#name-type-allow_expr?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
allow_expr?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Allow passing expressions as argument values. Expressions cannot be type validated.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="name-type-constraints" href="#name-type-constraints">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
constraints
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">Keyword.t</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">[]</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Constraints to provide to the type when casting the value. See the type's documentation and `Ash.Type` for more.
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Calculation.Argument`
|
|
|
|
|
|
|
|
|
|
### Introspection
|
|
|
|
Target: `Ash.Resource.Calculation`
|
|
|
|
|
|
|
|
|
|
## multitenancy
|
|
Options for configuring the multitenancy behavior of a resource.
|
|
|
|
To specify a tenant, use `Ash.Query.set_tenant/2` or
|
|
`Ash.Changeset.set_tenant/2` before passing it to an operation.
|
|
|
|
See the [multitenancy guide](/documentation/topics/multitenancy.md)
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
```
|
|
multitenancy do
|
|
strategy :attribute
|
|
attribute :organization_id
|
|
global? true
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Options
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Default</th>
|
|
<th colspan=2>Docs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="multitenancy-strategy" href="#multitenancy-strategy">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
strategy
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:context | :attribute</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">:context</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Determine if multitenancy is performed with attribute filters or using data layer features.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="multitenancy-attribute" href="#multitenancy-attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">atom</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
If using the `attribute` strategy, the attribute to use, e.g `org_id`
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="multitenancy-global?" href="#multitenancy-global?">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
global?
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">boolean</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">false</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
Whether or not the data also exists outside of each tenant.
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: left">
|
|
<a id="multitenancy-parse_attribute" href="#multitenancy-parse_attribute">
|
|
<span style="font-family: Inconsolata, Menlo, Courier, monospace;">
|
|
parse_attribute
|
|
</span>
|
|
</a>
|
|
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">mfa</code>
|
|
</td>
|
|
<td style="text-align: left">
|
|
<code class="inline">{Ash.Resource.Dsl, :identity, []}</code>
|
|
</td>
|
|
<td style="text-align: left" colspan=2>
|
|
An mfa ({module, function, args}) pointing to a function that takes a tenant and returns the attribute value
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
|