wolfiton
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
Trending in Questions
Other Trending Topics
Latest Phoenix Threads
Latest on Elixir Forum
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
- #blog-post
- #ai
- #phoenix_html
- #iex
- #elixirconf-us
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming











Showing Posts 1 to 7- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
benwilson512
Please provide the full stack trace of the error, and it would probably help to link to the form within that code base.
wolfiton
Thanks @benwilson512 for the suggestion I added more info.
benwilson512
https://github.com/wolfiton/blog_api/blob/master/lib/blog_api_web/templates/article/form.html.eex#L29 is the issue, it isn’t valid to pass a function to
select.wolfiton
OK so I use the nested without passing a fn then?
benwilson512
I’m not really sure I understand why you need a nested form at all.
:category_idis 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,
selectdoes not create a nested form, you wantinputs_forfor that.wolfiton
Thanks I will check it out
Also to answer to you questions
I thought that this is the best way to achive what i wanted. But if it is not then please recommend a better way I have created this project to learn and understand phoenix so i am very open to any suggestions you might have.
Thanks again for helping me with this.
benwilson512
If what you want is to edit the
category_idfield, just treat it like the:titlefield.