@proelixir

Страница 947 из 1045
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
контексте

мб

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
Чтд, про все тормоза рельсов

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
не вижу смысла обсуждать activerecord в контесте ecto
Вопрос в том, нужны тебе все комменты или нет

Потому что я так этого и не понял

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

Dmitry
07.05.2018
13:26:06
Ты должен загрузить в контролере из базы то, что тебе нужно

Но я так понимаю, ты сам не очень понимаешь что тебе нужно

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

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: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
post.comments |> Enum.filter(& &1.inserted_at > xxx) |> Enum.count()
пожалуй лучший комментарий треда

а главное самый полезный

Dmitry
07.05.2018
13:40:17
пожалуй лучший комментарий треда
тут за архитектуру все таки затирают, а не как данные фильтровать) Если это то, что нужно было - значит вопрос плохо задал

Vitaly
07.05.2018
13:40:57
post.comments |> Enum.filter(& &1.inserted_at > xxx) |> Enum.count()
ну я бы такое считал за бизнес логику

и хранил бы в контексте

мало ли где пригодится

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
Контекст ходит в базу

А тут ты уже сходил

Можно сервис сделать

Страница 947 из 1045