wlminimal

wlminimal

Question about Ecto Pagination using Scrivener

Hello guys

I am working on Ecto pagination using Scrivener.
First I wanted to paginate contacts in Phonebook. So I did like this.

in phonebook_controller.ex

  # Show Contact List
  def show(conn, %{"id" => id} = params) do
    user = conn.assigns.current_user
    phonebook = Contact.get_phonebook!(id, user.id)
    # pass the params for pagination
    page = Contact.get_people(phonebook.id, params)
    render(conn, "show.html", phonebook: phonebook, people: page)
  end

in contact.ex
def get_people(phonebook_id, params) do
    query = from p in Person, where: p.phonebook_id == ^phonebook_id
    Repo.paginate(query, params)
end

And it works,

but I have a Order schema and LineItems as embeds_many like this.

  schema "orders" do
    field :counts, :integer
    field :status, :string
    embeds_many :line_items, LineItem, on_replace: :delete

    timestamps()
  end

what I want to do is to paginate LineItems in the page. But I couldn’t do it..
I tried this.

 query = from r in Order, where: r.id == ^recipients_id and r.status == "In Recipients List", select: r.line_items
 Texting.Repo.paginate(query, conn.params)

and it returns this

%Scrivener.Page{
  entries: [
    [
      %Texting.Sales.LineItem{
        id: "b9f72136-bb83-461b-8362-1cf01c8df306",
        name: "john",
        person_id: 5,
        phone_number: "2134323197"
      },
      %Texting.Sales.LineItem{
        id: "cf0bfd68-7eaf-4ad3-acbe-4001adf4442b",
        name: "Mom",
        person_id: 1,
        phone_number: "1232844340"
      },
      %Texting.Sales.LineItem{
        id: "bbd868be-690a-431a-bd67-07ecf3fe6dd8",
        name: "Dad",
        person_id: 2,
        phone_number: "1234578547"
      },
      %Texting.Sales.LineItem{
        id: "d483dbc2-926a-4493-87df-8edc7242bf81",
        name: "Alan",
        person_id: 3,
        phone_number: "3265412547"
      },
      %Texting.Sales.LineItem{
        id: "8de2f14f-1015-429e-b647-223bb3df2562",
        name: "Jimmy", 
        person_id: 4,
        phone_number: "1953254781"
      },
      %Texting.Sales.LineItem{
        id: "5e61b915-b711-4c2e-afa6-e1aecdaf53cd",
        name: "Lee",
        person_id: 7,
        phone_number: "3264123215"
      },
      %Texting.Sales.LineItem{
        id: "f4cefa4a-301c-434a-9a1d-636c8284c380",
        name: "Kevin",
        person_id: 8,
        phone_number: "5559872478"
      }
    ]
  ],
  page_number: 1,
  page_size: 5,
  total_entries: 1,
  total_pages: 1
}

This is something expected.. because line_itmes is a list itself in Order schema. so it is nested list,
Pagination recognize line_item(list) as just 1 entry.

How can I get this working?
Please help! :slight_smile:

Most Liked

mbuhot

mbuhot

Assuming the embeds_many is declared as an array field in Postgres, you should be able to use a fragment and unnest to get each item back as a separate row.
From there scrivener should work as normal.

Where Next?

Popular in Questions Top

Tee
can someone please explain to me how Enum.reduce works with maps
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New

Other popular topics Top

Nvim
Anybody knows a comprehensive comparison of Django and Phoenix, thanks for the help. Where are they similar? Where do they differ the m...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New

We're in Beta

About us Mission Statement