`form_to` with multiple reference IDs: More "type" safety?

I’m working my way through the Ash book and got the chapter on creating an “album” that is associated with an artist. The book suggests that the way to handle passing in the associated artist when creating a new album involves the forms DSL from AshPhoenix. Here’s the specific snippet:

forms do
  form :create_album, args: [:artist_id]
end

This results in the creation of a form_to_create_album/2 function that takes an artist_id as the first argument. This of course works fine, but it worries me a bit that it takes a raw ID as the first argument (typically an integer or UUID). If there was more than one reference that needed to be added, there’s a non-zero chance that I’ll accidentally pass in the arguments in the wrong order without knowing about it.

In non-Ash projects in the past, I’ve taken to enforcing some additional safety in cases like this by having a function like form_to_create_album/2 take a %Artist{} as the first argument and pattern match on it to ensure that it’s correct. So, my question is, is that something that’s easy to do with Ash/AshPhoenix, or would it require custom actions or something? Or is this pattern simply not used in Ash?

I’m still very new to Ash, so please forgive my ignorance if this was a bad question.

I believe that if you keep reading you will see a mechanism to have special argument types for your code interfaces. That example could be adjusted to taking a struct at the interface level and an id at the action level :slight_smile:

1 Like

I guess that’s what I get for my impatience. Thanks for your response!

1 Like