viniciuslm
How use filter with ash.calculation?
defmodule Project.Calculations.ActiveCustomer do
use Ash.Calculation
alias Project.Customer
@impl true
def calculate(records, _opts, %{}) do
Enum.map(records, fn record ->
active_customer?(record)
end)
end
defp active_customer?(%Client{amount: amount, status: status})
when amount > 0 and status == :active,
do: true
defp active_customer?(_), do: false
end
efmodule Project.Customer do
use Ash.Resource, data_layer: AshPostgres.DataLayer
alias Project.Calculations.ActiveCustomer
postgres do
table("customer")
repo(Project.Repo)
end
attributes do
uuid_primary_key :id
create_timestamp :inserted_at
update_timestamp :updated_at
attribute :name, :string, do: allow_nil? false
attribute :identificacao_cliente, :string, do: allow_nil? false
attribute :status, :boolean, do: allow_nil? false
attribute :amount, :integer do
allow_nil? false
default 0
end
end
code_interface do
define_for(Project.Operaction)
define :by_id_and_active_customer, args: [:id], action: :by_id_and_active_customer
end
actions do
defaults([:read])
read :by_id_and_active_customer do
prepare(build(load: :active_customer?))
argument(:id, :uuid, allow_nil?: false)
get?(true)
filter(expr(id == ^arg(:id) and active_customer? == true))
end
end
calculations do
calculate :active_customer?, :boolean, ActiveCustomer
end
end
when execute Project.Customer.by_id_and_active_customer “48804d19-4747-45ae-96c3-9738cf724f4d”, than show an error:
(exit) an exception was raised:
** (UndefinedFunctionError) function Project.Calculations.ActiveCustomer.expression/2 is undefined or private
I readed the manual, but it haven’t example for use with expression.
https://hexdocs.pm/ash/Ash.Calculation.html
I need to use calculation, because, i have more code. I simplified the code.
Can someone help me?
Most Liked
zachdaniel
Creator of Ash
Correct, you cannot use that in a filter. You can do a lot using expressions, so consider if that is possible. Keep in mind that you can use fragment to embed raw sql into an expression, i.e expr(fragment("SOME ? SQL ? WITH ? SAFE ? INTERPOLATION", field1, field2))
1
Popular in Questions
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
Hello, how can I check the Phoenix version ?
Thanks !
New
Hello, I have map which I want to convert it to string like this:
the map:
%{last_name: "tavakkoli", name: "shahryar"}
the string I ne...
New
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set?
Thanks.
New
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this:
...
New
Credo is smart enough to check for (something like) this:
assert length(the_list) == 0
with this response:
Checking if an enum is empt...
New
Hi,
I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
Other popular topics
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
Hello everybody,
usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
Using vs code and installed ElixirLS: support and debugger.
And I got an error popped up on start up says
Failed to run ‘elixir’ comma...
New
Hello guys,
I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine)
This is a plugin that adds support for Elixir to JetBrains IntelliJ...
New
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
New
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
Hi everyone!
I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









