Size: a a a

Эликсир и Вунш

2020 April 27

F

Franco in Эликсир и Вунш
а как должно стать, вот по инструкции  добавить в repo, затем использовать функцию paginate, и добавить миграцию?
источник

VS

Vladimir Sekisov in Эликсир и Вунш
Franco
подскажите, как это применить , пробую, получаю такое
Ecto.SubQueryError at GET /chats/1
the following exception happened when compiling a subquery.
   ** (Ecto.QueryError) deps/paginator/lib/paginator.ex:231: field uuid in select does not exist in schema Division.Chats.Chat in query:
   
   from c0 in Division.Chats.Chat,
     where: c0.id == ^"1",
     limit: ^10001,
     select: %Division.Chats.Chat{uuid: struct(c0, [:uuid]).uuid}
   

The subquery originated from the following query:

from c0 in subquery(from c0 in Division.Chats.Chat,
 where: c0.id == ^"1",
 limit: ^10001,
 select: struct(c0, [:uuid])),
 select: count("*")
а cursor_fields ему поставили?
иначе он будет брать в качестве ключа, что там у него по-умолчанию
источник

F

Franco in Эликсир и Вунш
Вот в этом самая проблема, я не умею ещё в документации разбираться, там так скудно это указано, в книжках такого не нашёл, короче ничего не понимаю но очень интересно)
источник

VS

Vladimir Sekisov in Эликсир и Вунш
Repo.paginate(query, cursor_fields:  [:id])
источник

F

Franco in Эликсир и Вунш
cursor_for_record(record, cursor_fields)
cursor_for_record(any(), [atom()]) :: binary()

там предлагают отдельную функцию
источник

VS

Vladimir Sekisov in Эликсир и Вунш
https://github.com/duffelhq/paginator#usage
вроде бы все нарисовано
источник

F

Franco in Эликсир и Вунш
может это тупые вопросы то, но я впервый раз что то пытаюсь не по книжке делать
там на гите так, а на hexdocs в примере стоят параметры
https://hexdocs.pm/paginator/Paginator.html
defmodule MyApp.Repo do
 use Ecto.Repo, otp_app: :my_app
 use Paginator,
   limit: 10,                           # sets the default limit to 10
   maximum_limit: 100,                  # sets the maximum limit to 100
   include_total_count: true,           # include total count by default
   total_count_primary_key_field: :uuid # sets the total_count_primary_key_field to uuid for calculate total_count
end

и в конце пример
query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id], select: p)

Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)

я его и воткнул
https://gist.github.com/Archy17/a15dc33752984494abbc4843669284cf/revisions
источник

VS

Vladimir Sekisov in Эликсир и Вунш
total_count_primary_key_field: :uuid

вот тут на свой primary key поменяйте
источник

F

Franco in Эликсир и Вунш
Vladimir Sekisov
total_count_primary_key_field: :uuid

вот тут на свой primary key поменяйте
а как узнать что это ? все перерыл, что это за параметр?
источник

PG

Pig Greenest in Эликсир и Вунш
Посмотреть схему
источник

PG

Pig Greenest in Эликсир и Вунш
по умолчанию Ecto создает primary key с именем id
источник

VS

Vladimir Sekisov in Эликсир и Вунш
вы ему сказали:
include_total_count: true,
total он считает по
total_count_primary_key_field:
источник

PG

Pig Greenest in Эликсир и Вунш
Если вопрос был про опции пажинатора, то они описаны здесь
источник

F

Franco in Эликсир и Вунш
тоесть мне надо в таблицу сообщений добавить  поля :id, :binary_id, primary_key: true ?
источник

AD

Anastasiya Dyachenko in Эликсир и Вунш
Franco
тоесть мне надо в таблицу сообщений добавить  поля :id, :binary_id, primary_key: true ?
скорее всего он уже есть, должен быть в схеме message.ex такой строчкой

@primary_key {:id, :binary_id, autogenerate: true}


и
ли можно посмотреть в самой бд, если постгрес, через терминал
psql -h localhost -p 5432 -U postgres -w -d database_name
\d messages

"messages_pkey" PRIMARY KEY, btree (id) - ищи вот такую строку
источник

F

Franco in Эликсир и Вунш
schema "messages" do
   field :content, :string
   belongs_to :chat, Chat
   belongs_to :user, User

   timestamps()
 end
источник

F

Franco in Эликсир и Вунш
только это
источник

AD

Anastasiya Dyachenko in Эликсир и Вунш
над schema есть что-нибудь?
источник

F

Franco in Эликсир и Вунш
defmodule Division.Chats.Message do
 use Ecto.Schema
 import Ecto.Changeset
 alias Division.Accounts.User
 alias Division.Chats.Chat
источник

F

Franco in Эликсир и Вунш
тока это
источник