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!