adam

adam

I have run into an issue when using path helpers in a form_for function when trying to edit a resource. In this case I am trying to update an existing resource.

The router kicks out the following

categories_path  GET        /categories       MyApp.CategoriesController :index
categories_path  POST      /categories       MyApp.CategoriesController :create
categories_path  PATCH   /categories/:id   MyApp.CategoriesController :update
                            PUT       /categories/:id   MyApp.CategoriesController :update

My form_for opens as

<%= form_for(@client_changeset, categories_path(@conn, :update, @client), fn f -> %>

(the categories controller handles submissions for both clients and topics as they are the ‘categories’)

My understanding is, providing a changeset for an existing resource to form_for means the submission would be a POST to

/categories/<id of resource>

with

“_method” => “put” (or “patch”)?

I then take the params where I can use the id for fetching the resource from storage then sending that along with the client params for the update.

However. If I set up the form_for as shown I always get the error,

protocol Enumerable not implemented for %MyApp.Client{... etc }

If I remove the @client from the call to categories_path the error goes away, but the form submission does not include an id in the path.

Revised form_for

<%= form_for(@client_changeset, categories_path(@conn, :update), fn f -> %>

POSTs to

/categories

As a workaround I have added the id @client.id as a hidden field on the form so I can pluck it from the params. This however feels wrong and hacky, and doesn’t align with the boilerplate code a phoenix generator produces or my understanding of the path_helper included in the form_for action.

I’ve checked the categories_path in iex and I can pass

categories_path(MyApp.Endpoint, :update, Repo.get(Client, 1))

and it returns

"/categories/1"

as it should.

Any help here would be greatly appreciated. Thanks.

Showing Posts 1 to 9

idi527

idi527

What error do you get if you try

<%= form_for(@client_changeset, categories_path(@conn, :update, @client, []), fn f -> %>

?

Can you show the code you use to generate the routes for categories?

adam

adam OP

I get

undefined function categories_path/4

router.ex for categories reads

resources("/categories", CategoriesController, only: [:index, :create, :update])
NobbZ

NobbZ

Just to be sure the parser isn’t irritated, have you tried form for without parentheses?

amnu3387

amnu3387

It should be categories_path(@conn, :update, @client.id), it won’t extract the ID for you

idi527

idi527

Since categories_path/4 doesn’t exist, the third argument in categories_path/3 is an option list, so I doubt categories_path(@conn, :update, @client.id) would work since @client.id is not a list of options.

And there is usually a Phoenix.Param implementation or something like that to, in this case, extract id out of @client, so if categories_path(@conn, :update, @client.id) worked, categories_path(@conn, :update, @client) would work as well.

amnu3387

amnu3387

nevermind - now it works for me without id too, must be the gnomes

adam

adam OP

Nobbz,

I appreciate you answering. Total face-palm moment.

The page has two forms on it, for the two categories. I was (like a complete fool) reading the error message which was about the second form while making changes to the first one!

Adding and removing parentheses finally woke me up to this as the stacktrace showed parens still in place. THAT’S WHEN I REALIZED. :frowning:

Sorry to have wasted everyone’s time…

adam

adam OP

See my note about me being a total fool, but, just FYI it works for me just using client, I don’t need to add the .id

Now I need to work on my stack trace reading skills.

amnu3387

amnu3387

It’s either gnomes or robots you never know

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
itzmidinesh
Hi all, I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
csmr
Hi all, I’m new here and would like to hear peoples views on my Elixir/Phoenix based game-engine! :smiley: Mutonex gamedesign was finish...
New
Stef-Verniers
Hello I’ve been coding in Elixir for almost two years now because of my current job where we implemented Elixir in our application. But ...
New

Other Trending Topics Top

dominicletz
Hey there, I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first. ...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
OndrejValenta
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly) AI dream has many faces, but general...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews