Size: a a a

Saint P Ruby Community

2021 March 02

NB

Nikita Bulai in Saint P Ruby Community
users = UserRepository.new.where_created_at(params)
users = UserRepository.new.order(users, params)
users = UserRepository.new.paginate(..)

?
источник

AD

Anton Davydov in Saint P Ruby Community
Nikita Bulai
users = UserRepository.new
# тут надо отсортировать
# тут надо добавить where
# тут надо спагинировать

Я вот эти тра шага не понимаю как дожны быть реализованы на уровне репозитория (если не мутировать датасет, прилетевший в инициаизаторе)
Это все в репозитории должно быть
источник

v

vveare138 in Saint P Ruby Community
> идея в том, чтобы всегда вызывать тока один метод у репозитория?
да

> а потом если надо, то вернуть датасет и в новом репозитории отсортировать и всё такое прочее?
нет, репозиторий возвращает коллекцию или объект этого репозитория
источник

AD

Anton Davydov in Saint P Ruby Community
В методе репозитория
источник

AD

Anton Davydov in Saint P Ruby Community
vveare138
> идея в том, чтобы всегда вызывать тока один метод у репозитория?
да

> а потом если надо, то вернуть датасет и в новом репозитории отсортировать и всё такое прочее?
нет, репозиторий возвращает коллекцию или объект этого репозитория
Два чая господину
источник

AD

Anton Davydov in Saint P Ruby Community
Идея простирая, репозиторий это объект который просишь сделать с данными в бд что-то, а он сам делает это как-то
источник

v

vveare138 in Saint P Ruby Community
если нужно, можно возвращать pageable объект из репозитория, который несет в себе метадату о пагинации + кусок коллекции
источник

NB

Nikita Bulai in Saint P Ruby Community
пытаюсь понять.. Идею репозиториев я понимаю, но пока это выгядит так, что если мне надо получить записи, то будет метод load_records, а если мне надо получить записи и отсортировать, то будет ещё один метод - load_and_sort_records, а если надо спагинировать... ну вы поняли
или я чего-то пока не понял О_о
источник

AD

Anton Davydov in Saint P Ruby Community
Те функция в которую кладёшь данные, а потом достаёшь. Сортировки, условия и прочее - это реализация такой функции, которая инкапсулируется в методе репозитория
источник

AD

Anton Davydov in Saint P Ruby Community
Кстати, create || update это тоже логика, которая должна быть в методе репозитория. А тот, кто ее вызывает не должен знать ничего о реализации
источник

v

vveare138 in Saint P Ruby Community
Anton Davydov
Кстати, create || update это тоже логика, которая должна быть в методе репозитория. А тот, кто ее вызывает не должен знать ничего о реализации
ну и всякие delete
источник

NB

Nikita Bulai in Saint P Ruby Community
может есть где пример какой простейший глянуть? Я пока всё равно упорно не понимаю как выгядит апи репозитория для такого случая
источник
2021 March 03

v

vveare138 in Saint P Ruby Community
Nikita Bulai
пытаюсь понять.. Идею репозиториев я понимаю, но пока это выгядит так, что если мне надо получить записи, то будет метод load_records, а если мне надо получить записи и отсортировать, то будет ещё один метод - load_and_sort_records, а если надо спагинировать... ну вы поняли
или я чего-то пока не понял О_о
да, все так
источник

AD

Anton Davydov in Saint P Ruby Community
Покажи реальный пример что сделать хочешь
источник

AD

Anton Davydov in Saint P Ruby Community
Есть два варианта как сделать такую штуку:

1. Два метода с разными сортировками
2. Задавать сортировку как параметр метода репозитория
источник

v

vveare138 in Saint P Ruby Community
Nikita Bulai
пытаюсь понять.. Идею репозиториев я понимаю, но пока это выгядит так, что если мне надо получить записи, то будет метод load_records, а если мне надо получить записи и отсортировать, то будет ещё один метод - load_and_sort_records, а если надо спагинировать... ну вы поняли
или я чего-то пока не понял О_о
но я обычно разруливаю это через аргументы метода репозитория
источник

NB

Nikita Bulai in Saint P Ruby Community
Anton Davydov
Есть два варианта как сделать такую штуку:

1. Два метода с разными сортировками
2. Задавать сортировку как параметр метода репозитория
выше ж был. Есть параметры, надо найти, отсортировать и спагинировать юзеров по ним

users = UserRepository.new.where_created_at(params)
users = UserRepository.new.order(users, params)
users = UserRepository.new.paginate(..)
источник

AD

Anton Davydov in Saint P Ruby Community
Так это все один метод в репозитории
источник

NB

Nikita Bulai in Saint P Ruby Community
ну вот, я про то и спрашивал
источник

NB

Nikita Bulai in Saint P Ruby Community
Теперь понял, спасибо
источник