carlgleisner

carlgleisner

Eager checking on multiple attributes supported?

Is it supported to have eager_check?: true run on identities when the identity consists of more than one attribute?

I have a compound identity that indeed returns errors on submission with Postgres as data layer. On another resource using an identity with a single attribute I do get eager checking on validation however, as one would expect of course.

identities do
    identity :imaginative_party_name, [:host_id, :party_name] do
      eager_check? true
      message "success not possible if you insist on reusing party names all the time"
    end
  end

Looking at the documentation I cannot tell that this would not be supported. If so, then maybe this could be pointed out?

Marked As Solved

carlgleisner

carlgleisner

It works :slightly_smiling_face:

The thing was that I was using argument for the input of the key of the related record together with a change with manage_relationship. As I understand it now this is intended behaviour.

I dug up a few of your messages in the Discord which I think explain it:

I think you [i.e. another person] may be running into an issue around when managed relationships actually happen. Managing relationships is a bit special insofar as the logic to actually do so is handled by calling the action.

So when your validation runs, the technician_id is never going to be set.

You have a few options:

  1. don’t use managed relationships for the belongs_to relationship
  2. run your validation in an after_action hook in a custom change
  3. run your validations in the action, based on the arguments instead

You put examples in there as well, very helpful. Maybe I could copy these here as well if appropriate?

Humbly, maybe a note in the documentation could be of use for others? I’d be happy to provide a PR as a starting point if desirable.

Sidenote

I’m yet to try out the solutions you suggested since for now it’s just fine for me to not use argument+change. But I did wonder whether that also solves not getting errors after submission when passing in input that does not relate to the id of an existing record.

Reference codebase

I used this little reproduction for testing for future reference.

But I guess it’s technically not a “reproduction” when there is no actual issue :slight_smile:

https://github.com/carlgleisner/ash_phoenix_reproduction

EDIT: I should edit the title of this post for posterity

Also Liked

zachdaniel

zachdaniel

Creator of Ash

You would have my utmost gratitude :bowing_man:

This one would probably be a separate issue? Likely has something to do with input names not matching? But curious to see if its still an issue after your change :slight_smile:

zachdaniel

zachdaniel

Creator of Ash

Interesting. It should work :slight_smile: If not then its a bug.

Last Post!

zachdaniel

zachdaniel

Creator of Ash

You would have my utmost gratitude :bowing_man:

This one would probably be a separate issue? Likely has something to do with input names not matching? But curious to see if its still an issue after your change :slight_smile:

Where Next?

Popular in Questions Top

hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New

Other popular topics Top

stefanchrobot
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
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
AstonJ
Seen any cool LiveView demos, sample apps or examples? Please post them here! :003:
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New