kurtz
Hello there,
My first post here.
I am playing out with Elixir and the new Phoenix (1.3). Tried to create a Todo app following the code snippets here: Working with Ecto associations and embeds « Plataformatec Blog
Since it is Phoenix 1.3, I tried to put them into context. However, naming seems to be confusing.
I created the project as follows:
mix phx.gen.html Todo List lists title:string
mix phx.gen.schema Todo.Item items body:text list_id:references:lists
scheme are as follows:
schema "todo_lists" do
field :title, :string
has_many :todo_items, TodoApp.Todo.Item
timestamps()
end
…
schema "todo_items" do
field :body, :string
#field :todo_list_id, :id
belongs_to :todo_list, TodoApp.Todo.List
timestamps()
end
I receive this error:
Ecto.QueryError at GET /lists/4
deps/ecto/lib/ecto/association.ex:495: fieldTodoApp.Todo.Item.list_idinwheredoes not exist in the schema in query:
from i in TodoApp.Todo.Item,
where: i.list_id == ^4,
order_by: [asc: i.list_id],
select: {i.list_id, i}
It is clear that alto it should be TodoApp.Todo.Item.todo_list_id for in the DB there is no such field as list_id but todo_list_id.
How to fix this?
Trending in Questions
Other Trending 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
- #blog-post
- #phoenix_html
- #iex
- #graphql
- #ai
- #genstage
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex










First 3 of 3 Posts
aseigo
From the docs at Ecto.Schema — Ecto v3.14.0
:foreign_key - Sets the foreign key, this should map to a field on the other schema, defaults to the underscored name of the current schema suffixed by _id
So by default it will be “todo_list_id”, as that’s the schema name (I would actually expect todo_lists_id?). so you either need to change that “i.list_id” to “i.todo_list_id” in your query or else manually set what the primary key name is in your scheme to just be list_id .. I would do the former, though, as then you don’t have to keep remembering to do this
kurtz
Well, thanks. Setting the foreign key solved the issue.
But then again, does this have anything to do with context for before i used the same code snippets in phoenix 1.2 with no problem.
aseigo
Yeah, it just changed what the autogen’d schema name is ..