wolfiton
Select element in a nested form
Hi everyone,
I am getting an error when i try to add a select in a nested form
The error no function clause matching in Keyword.pop/3
My select code:
<div class="field">
<%= label f, :category, class: "label" %>
<div class="control">
<%= select f, :category_id, @categories, fn cf -> %>
IO.inspect(@categories)
</div>
<p class="help is-danger"><%= error_tag cf, :category %></p>
<% end %>
</div>
Update link to form as suggested by @benwilson512
https://github.com/wolfiton/blog_api/blob/master/lib/blog_api_web/templates/article/form.html.eex
Update error trace
[info] GET /articles/new
[]
[debug] Processing with BlogApiWeb.ArticleController.new/2
Parameters: %{}
Pipelines: [:browser]
[debug] QUERY OK source="categories" db=2.3ms
SELECT c0."id", c0."name", c0."slug", c0."inserted_at", c0."updated_at" FROM "categories" AS c0 []
[info] Sent 500 in 166ms
[error] #PID<0.840.0> running BlogApiWeb.Endpoint (connection #PID<0.839.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: GET /articles/new
** (exit) an exception was raised:
** (FunctionClauseError) no function clause matching in Keyword.pop/3
(elixir) lib/keyword.ex:977: Keyword.pop(#Function<2.44023343/1 in BlogApiWeb.ArticleView."form.html"/1>, :value, nil)
(phoenix_html) lib/phoenix_html/form.ex:1117: Phoenix.HTML.Form.selected/3
(phoenix_html) lib/phoenix_html/form.ex:1099: Phoenix.HTML.Form.select/4
(blog_api) lib/blog_api_web/templates/article/form.html.eex:29: anonymous fn/2 in BlogApiWeb.ArticleView."form.html"/1
(phoenix_html) lib/phoenix_html/form.ex:377: Phoenix.HTML.Form.form_for/4
(blog_api) lib/blog_api_web/templates/article/form.html.eex:1: BlogApiWeb.ArticleView."form.html"/1
(blog_api) lib/blog_api_web/templates/article/new.html.eex:3: BlogApiWeb.ArticleView."new.html"/1
(blog_api) lib/blog_api_web/templates/layout/app.html.eex:15: BlogApiWeb.LayoutView."app.html"/1
(phoenix) lib/phoenix/view.ex:410: Phoenix.View.render_to_iodata/3
(phoenix) lib/phoenix/controller.ex:729: Phoenix.Controller.__put_render__/5
(phoenix) lib/phoenix/controller.ex:746: Phoenix.Controller.instrument_render_and_send/4
(blog_api) lib/blog_api_web/controllers/article_controller.ex:1: BlogApiWeb.ArticleController.action/2
(blog_api) lib/blog_api_web/controllers/article_controller.ex:1: BlogApiWeb.ArticleController.phoenix_controller_pipeline/2
(phoenix) lib/phoenix/router.ex:288: Phoenix.Router.__call__/2
(blog_api) lib/blog_api_web/endpoint.ex:1: BlogApiWeb.Endpoint.plug_builder_call/2
(blog_api) lib/plug/debugger.ex:122: BlogApiWeb.Endpoint."call (overridable 3)"/2
(blog_api) lib/blog_api_web/endpoint.ex:1: BlogApiWeb.Endpoint.call/2
(phoenix) lib/phoenix/endpoint/cowboy2_handler.ex:42: Phoenix.Endpoint.Cowboy2Handler.init/4
(cowboy) /home/dan/Codes/blog_api/deps/cowboy/src/cowboy_handler.erl:41: :cowboy_handler.execute/2
(cowboy) /home/dan/Codes/blog_api/deps/cowboy/src/cowboy_stream_h.erl:320: :cowboy_stream_h.execute/3
Update article controller
https://github.com/wolfiton/blog_api/blob/master/lib/blog_api_web/controllers/article_controller.ex
Update migrations for articles and categories
https://github.com/wolfiton/blog_api/blob/master/priv/repo/migrations/20191203154052_create_articles.exs
https://github.com/wolfiton/blog_api/blob/master/priv/repo/migrations/20191213160415_create_categories.exs
Schemas and contexts
https://github.com/wolfiton/blog_api/blob/master/lib/blog_api/blog/article.ex
https://github.com/wolfiton/blog_api/blob/master/lib/blog_api/categories/category.ex
https://github.com/wolfiton/blog_api/blob/master/lib/blog_api/blog.ex
https://github.com/wolfiton/blog_api/blob/master/lib/blog_api/categories.ex
Also if there are any suggestions for the rest of my code the full code here https://github.com/wolfiton/blog_api
Thanks in advance
Marked As Solved
benwilson512
I’m not really sure I understand why you need a nested form at all. :category_id is a field of the changeset. Nested forms are necessary when you are editing a value AND an associated (or embedded) value. Your form only messes with the top level changeset.
Either way, select does not create a nested form, you want inputs_for for that.
Also Liked
benwilson512
Please provide the full stack trace of the error, and it would probably help to link to the form within that code base.
benwilson512
If what you want is to edit the category_id field, just treat it like the :title field.
<%= select f, :category_id, @categories %>
<p class="help is-danger"><%= error_tag f, :category %></p>
Last Post!
benwilson512
If what you want is to edit the category_id field, just treat it like the :title field.
<%= select f, :category_id, @categories %>
<p class="help is-danger"><%= error_tag f, :category %></p>
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









