Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 September 11

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
Антон Дьячук
а запрос на AR не строится?
Playlist.joins(audiobook: subscriptions).where(subscriptions: { territory: user.territory})

вот так отфильтруются плейлисты, а нужно, чтобы книги в каждом из них

как иначе построить запрос для фильтрации я не знаю, поэтому написал в чат и спросил

получил совет читать доку для ar
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
Books.group(:playlist).joins(subscriptions).where(subscription: { territory: user.territory}) сгруппировать по плейлисту не получится?
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
Roman Ustuantsev
Playlist.joins(audiobook: subscriptions).where(subscriptions: { territory: user.territory})

вот так отфильтруются плейлисты, а нужно, чтобы книги в каждом из них

как иначе построить запрос для фильтрации я не знаю, поэтому написал в чат и спросил

получил совет читать доку для ar
ну… структура данных не известна. Выдумывать выдумки из неизвестных структур никто оне умеет. Поэтому да, идите доку читайте
А еще раз наедете на комьюнити - будут репрессии
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
Мне без структуры и консоли сложно правильный запрос построить, но группировка должна помочь вроде, а ну там еще надо select дописать
источник

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
Антон Дьячук
ну… структура данных не известна. Выдумывать выдумки из неизвестных структур никто оне умеет. Поэтому да, идите доку читайте
А еще раз наедете на комьюнити - будут репрессии
я написал структуру

Playlist -> audiobooks -> licenses -> territories
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
many, many, many, many?
источник

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
Антон Дьячук
many, many, many, many?
да
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
интересно
Хорошо, а какую структуру на выходе вы планируете получить?
источник

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
Антон Дьячук
интересно
Хорошо, а какую структуру на выходе вы планируете получить?
плейлисты, в которых книги, остальное за кадром остается
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
ну у вас уже в втаблице плейлисты и книги, профит
какую *структуру* вы хотите получить
источник

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
Антон Дьячук
ну у вас уже в втаблице плейлисты и книги, профит
какую *структуру* вы хотите получить
верно. вопрос был не в том, как структуру изменить, а в том, как отфильтровать книги в каждом из плейлистов, чтобы разные юзеры с разной территорией видели разные книги

Пример:

Плейлист 1:
-> Книга 1
...-> Лицензия 1
......-> Территория 1
......-> Территория 2
......-> Территория 3
...-> Лицензия 2
.........
-> Книга 2
...-> Лицензия 3
......-> Территория 4
......-> Территория 5
......-> Территория 6
...-> Лицензия 4
...

Юзер:
Территория 6


В плейлисте 1 вернется только книга 2
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
мне не кажется что задача полностью сформулирована
наверное вы не будете отображать пользоавтелю все все аудиокниги, их миллиард
наверное вам нужно отображать книги внутри плейлиста
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
а если пользовавтель способен их окинуть взглядом - отфильтруйте без AR
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
я не уверен что сгруппироанный хеш со всеми книгами вам нужен в памяти
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
а связь playlist - book через промежуточную таблицу?
источник

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
да
источник

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
Viacheslav Stepanov
а связь playlist - book через промежуточную таблицу?
в разных плейлистах могут быть одни и те же книги
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
Books.select('playlists.id as playlist_id, books.id as book_id').group('playlists.id, books.id').joins(playlists, :subscriptions).where(subscriptions: { territory: user.territory}).order('playlists.id').map { |tuple| [tuple.playlist_id, tuple.book_id]}
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
выдаст пары [ плейлист id, книга id] отсортированные по плейлист id
источник

RU

Roman Ustuantsev in Ruby, Rails, Hanami | dry-rb
Viacheslav Stepanov
Books.select('playlists.id as playlist_id, books.id as book_id').group('playlists.id, books.id').joins(playlists, :subscriptions).where(subscriptions: { territory: user.territory}).order('playlists.id').map { |tuple| [tuple.playlist_id, tuple.book_id]}
сейчас попробую, спасибо!
источник