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?

https://hexdocs.pm/ash/3.4.60/identities.html#eager-checking

1 Like

Are you saying that eager checking is not working for your compound identity?

Yes I’m sorry for failing to make that explicit.

I’ll revert with a reproduction (have a few of those outstanding at the moment).

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

1 Like

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:

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

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:

2 Likes