Hi! I am a complete beginner in Elixir and Phoenix. I am trying to understand couple of things and I will be grateful for your help!
What is the meaning of this argument %{"id" => id}
?
It is used in this function:
def show(conn, %{"id" => id}) do
user = Accounts.get_user(id)
render(conn, "show.html", user: user)
end
Cheers!
It’s called pattern matching. You expect an argument that is a map with an “id” key and assigns it’s value to id variable Pattern matching - The Elixir programming language
1 Like
Thank you for the reply!
I did read the link that you’ve given me before, however I still struggle to understand where it comes from. Is this argument in conn? That’s where it is looking for it?
Elixir allows you to pattern match on arguments, so you can say that this function expects the argument passed to it to have some shape defined by you. When you call the function it will execute only when the argument matches the expectation. In this case the second argument is params
passed to the action by a router. Let’s say the call looks like this
FooController.show(conn, params)
If params is %{"id" => 1, "comment" => "Some Text"}
it will execute your function. If it is for example %{"comment" => "Some Text"}
elixir will look for another definition of show
that actually can match on this value. If it doesn’t find any, elixir will raise an error.
You can redefine your function to be and it will have the same effect
def show(conn, params) do
case params do
%{"id" => id} ->
user = Accounts.get_user(id)
render(conn, "show.html", user: user)
_ ->
raise MatchError
end
end
3 Likes
Or you can also take a look at Functions · Elixir School
2 Likes
Thank you so much, I think I get it now! This is the answer I hoped for!