
Dmitry
07.05.2018
13:09:48
В рельсах можно сделать в модели
Вернее нужно сделать в модели

Alexey
07.05.2018
13:10:13
А, я не внимательно прочитал, что нужно сделать
пардон

Google

Moi_nik
07.05.2018
13:15:48
врельсе очень простое решение
scope :published, -> { where(published: true) }
scope :top_rated, -> { where('rating > ?', 4)}
post.comments.top_rated.published
всё
теперь скажите как это написать по феншую на фениксе?
функции published и top_rated должны быть во вью || контроллер || плаг?

Vitaly
07.05.2018
13:19:09
контексте
мб

Dmitry
07.05.2018
13:21:10

Moi_nik
07.05.2018
13:21:17
1 раз

Dmitry
07.05.2018
13:21:17
С такой реализацией?

Dmitry
07.05.2018
13:21:31
Мне кажется надо написать Ecto.query/plain SQL (как удобней) в контексте
В контроллере вызвать нужные методы и собранные данные отобразить во вью

Moi_nik
07.05.2018
13:21:45
этот чейн выполнится как один запрос

Dmitry
07.05.2018
13:21:53
Чейн да
Но ты же говоришь, что у тебя уже загружены комменты
То есть ты уже ходил в базу
А значит у тебя будет 2 запроса?

Google

Vitaly
07.05.2018
13:23:01
да, ты же скорее всего заджоинил все комменты

Dmitry
07.05.2018
13:23:26
Чтд, про все тормоза рельсов

Aldar
07.05.2018
13:23:33

Moi_nik
07.05.2018
13:23:52
не вижу смысла обсуждать activerecord в контесте ecto

Dmitry
07.05.2018
13:23:58
Сам того не заметив - пульнул в базу 2 одинаковых зароса

Moi_nik
07.05.2018
13:24:11
феникс быстрее и это факт

Taras ?
07.05.2018
13:24:16
? ecto

Dmitry
07.05.2018
13:24:18
Потому что я так этого и не понял

Moi_nik
07.05.2018
13:25:16
это могут быть и не комменты, а некоторые ассоциации, просто вопрос сформулирован в максимально доступной форме

Dmitry
07.05.2018
13:26:06
Ты должен загрузить в контролере из базы то, что тебе нужно
Но я так понимаю, ты сам не очень понимаешь что тебе нужно

Moi_nik
07.05.2018
13:26:50
вопрос мой в следующем, если нужны манипуляции с ассоциациями по их аттрибутам уже загруженных обьектов - как лучше делать?

Dmitry
07.05.2018
13:27:16
Потому что это разные вещи

Aldar
07.05.2018
13:27:25

Moi_nik
07.05.2018
13:27:30
в экто

Dmitry
07.05.2018
13:27:50
Если ты выкачал из базы все комменты
То ты их фильтруешь во вью
Но если ты скачал все комменты чтобы их отфильтровать потом - то не надо так делать

Google

Moi_nik
07.05.2018
13:28:36
воот, значит можно сделать фильтры во вью
ок
спасибо, буду копать в этом направлении.

Dmitry
07.05.2018
13:29:32
странные советы какие-то, фильтруй в контексте предметной области/контроллере
вью только на вывод

Dmitry
07.05.2018
13:29:50
Говорит

Dmitry
07.05.2018
13:30:00
в контроллер же загрузил
там пусть и фильтрует

Dmitry
07.05.2018
13:30:18
Ну тык он наверное во вью их прокинул
Иначе зачем он их грузил все?

Dmitry
07.05.2018
13:30:28
если во вьюхе - то это плохая практика, так не надо делать

Dmitry
07.05.2018
13:31:06
А в рендер кидать два одинаковых поста, но с разным количеством комментов - это бред

Артем
07.05.2018
13:31:52
особенно счётчики по прелоаду
вьюс - это как хэлпер в рельсах жи

Moi_nik
07.05.2018
13:34:04
яже привёл пример выше.
1 есть пост и загруженные все комментарии (мы не обсуждаем пагинацию и прочие вещи), все комментарии загружены.
2 по аттрибутам комментариев надо получить цыфры - топ комментарии, опубликованные комментарии и так далее. (мы не говорим про сквозные асскоциации, все необходимые атрибуты уже есть в комментарии.)
Вот и весь был вопрос. Я полагал что есть простые интрументы типа length() и группировки по аттрибуту. Выходит что каждое такое вычисление надо складывать в отдельную функцию/фильтр - я верно вас понял?

Dmitry
07.05.2018
13:34:32
Ну это же функциональный язык

Артем
07.05.2018
13:34:43
смотри, умный человек тебе выше ответил

Dmitry
07.05.2018
13:34:45
Все в отдельных функциях

Артем
07.05.2018
13:34:55
Moi_nik, [07.05.18 16:15]
врельсе очень простое решение
scope :published, -> { where(published: true) }
scope :top_rated, -> { where('rating > ?', 4)}
post.comments.top_rated.published
всё
теперь скажите как это написать по феншую на фениксе?

Google

Moi_nik
07.05.2018
13:34:56
это значит да?

Артем
07.05.2018
13:35:01
так нельзя делать и в рельсах

Moi_nik
07.05.2018
13:35:12
ок

Артем
07.05.2018
13:35:23
В руби это так post.comments.pluсk(published: true, created_at: 7.days.ago)
С фениксом только разбираюсь, подумал может есть что-то штатное такую элементарщину сделать?
и так нельзя

Moi_nik
07.05.2018
13:35:40
Артём, давайте не будем переключаться на рельсу, это был всего-лишь пример
да, плак тоже хороший метод
и мап и селект и имя им легион

Vitaly
07.05.2018
13:36:41
#pluck запрос в бд делает если что

Dmitry
07.05.2018
13:37:04
плохая практика в темплейте, а во вью - отличная
да, я когда про вью говорил - подразумевал темплейты.
но если подобные вычисления во вью класть - размазывается бизнес-логика по всему приложению
в фениксе мне кажется хелперы во вью - чисто html теги, собрать какую-нибудь структуру из html тегов и т.п., точно не данные из базы группировать

Артем
07.05.2018
13:37:43
post.comments |> Enum.filter(& &1.inserted_at > xxx) |> Enum.count()
и тд и тп
сделал во вью метод, отдаёшь туда данные, получаешь результат

Moi_nik
07.05.2018
13:38:47
а главное самый полезный

Dmitry
07.05.2018
13:40:17

Vitaly
07.05.2018
13:40:57
и хранил бы в контексте
мало ли где пригодится

Dmitry
07.05.2018
13:41:17
Просто душа болит за софт, в котором сперва из контроллера в БД сходили, всю базу выкачали, потом из Вью

Google

Dmitry
07.05.2018
13:41:27
Повторный запрос летит
А потом еще пофильтровали не быстрой БД
А медленным эликсиром

Артем
07.05.2018
13:42:10
это же условный пример

Vitaly
07.05.2018
13:43:00
а если нужно это вывести в нескольких вьюхах
в http api
и еще где-то посчитать?

Артем
07.05.2018
13:43:30
а если нет?

Dmitry
07.05.2018
13:43:35
вообще наверное идеальным решением было бы 2 запроса кинуть, первый - выгрузить комменты, 2 - запрос count с группировками нужными

Dmitry
07.05.2018
13:43:40
Как то обычно вьюхи нормально делятся контекстно
У вью же несколько шаблонов может быть

Vitaly
07.05.2018
13:44:10

Dmitry
07.05.2018
13:44:24
Ну и можно сделать композицию для view
Через using View.Common
Или там import

Артем
07.05.2018
13:47:37

Vitaly
07.05.2018
13:48:03
это все холивар конечно же, но банально, если коментариев будет много и/или у них появится пагинация, нужно будет все равно делать логику в контексте, нет?

Dmitry
07.05.2018
13:48:21
Контекст ходит в базу
А тут ты уже сходил
Можно сервис сделать