
Sergey
30.03.2017
10:10:45

Demyan
30.03.2017
10:11:26
ну так написал бы, если автор гем поддерживает или комньюнити. помогут решить проблему
исью помогает часто если автор норм и комьюнити есть

Vasiliy
30.03.2017
10:12:28
а вдруг автор умер?

Google

Sergey
30.03.2017
10:24:15
а вдруг автор полный кукумбер?)

Evgeny
30.03.2017
10:25:35

Demyan
30.03.2017
10:26:08

Evgeny
30.03.2017
10:29:51
https://gist.github.com/EvgenyKungurov/fe6e0ce5c1234a0c15d99375bf1aad9a
Как можно улучшить этот код?
ПРавильно ли я делаю так, что подавляю ошибки
Или мб лучше получить ошибку и выдать ответ клиенту ошибку с описание чего не хватает
Или обработаь ошибки и выдаь сообщение, чтобы в ajax не была рубишная ошибка, а обычное ясное сообщение

Demyan
30.03.2017
10:34:32
3

Evgeny
30.03.2017
10:34:33
Читал в соседнем чате, жаловались, что по api приходит 200, но ни ошибок ничего, это же не удобно верно для клиента, ничего не ясно. Отсюда идет вопрос, что если я возвращаю пустой массив или путую raltion, но ответ идет с кодом 200, то не очень понятно что не так.
3
А если я просто проверяю If'ами и делаю return с ошибкой тоже вариант в приницпе верно, по логке это быстрее. Но вглянем на рельсы, там везде эксепшены, удобно понять что не так. Вот я и никак не могу придти к каким то best practics, везде разная инфа. Вероятно при разных кейсах лучше по-разному делать

Demyan
30.03.2017
10:37:37
if
на мой взгляд не бест практис

Google

Vasiliy
30.03.2017
10:38:04
200 надо ж возвращать с данными
если действие то 201 без данных
по феншую

ojab
30.03.2017
10:41:49
Зачем там Scopes в отдельном классе и FindAds в отдельном классе? Что мешает это в модели сделать?
return Ad.none unless @location_id — почему в таком случае это не метод у Location (i. e. Location.find(id).ads.where(…))?

Evgeny
30.03.2017
10:44:40
Я стал жертвой сервисных объектов и т.п. Много смотрел кто делает как, вот такое и получилось у меня

DEFACE
30.03.2017
10:44:44
кто нибудь пользуется ide от JetBrains?

Demyan
30.03.2017
10:45:02
зачем7

Evgeny
30.03.2017
10:45:12
Пытаюсь стрелять их пушки по воробьям

Andrey
30.03.2017
10:45:12

DEFACE
30.03.2017
10:45:20
+
Не знаешь можно ли там забиндить двойное нажатие клавиши?

Andrey
30.03.2017
10:46:20
не знаю

ojab
30.03.2017
10:46:42

Demyan
30.03.2017
10:47:11

Evgeny
30.03.2017
10:47:45

ojab
30.03.2017
10:48:15

Evgeny
30.03.2017
10:48:28
щас сделаю скрин

ojab
30.03.2017
10:54:51
тогда лучше чётче описать задачу (варианты входных данные и что мы по ним хотим получить)

Google

ojab
30.03.2017
10:55:16
+непонятно что есть self_and_descendants и зачем оно нужно
ну и, заодно, wtf search()

s
30.03.2017
10:57:06
+ если от объекта нужен только id, то зачем его десериализовывать, лучше просто pluck

Evgeny
30.03.2017
10:57:35
pg_search_scope :search,
against: [:title, :content],
using: { tsearch: { prefix: true } }
Это для поиска сделал, поэтому такой и запрос вышел у меня

ojab
30.03.2017
11:13:48
Это для поиска сделал, поэтому такой и запрос вышел у меня
итого: мы хотим найти все активные объявления по params[:search]+ можем сужать поиск по [локация+сублокации, категория+подкатегории]. Какое поведение должно быть в случае передачи несуществующей локации/категории? AFAIU из интерфейса это сделать невозможно, можно только ручками поправить URL у запроса, так?

Evgeny
30.03.2017
11:17:36
Просто ничего не найдет, но и ошибок не будет т.к. find_by не вызывает исключения, а затем делаю safe operator если объект будет найден в базе. Если у категории или локации будут дети, то поиск будет и по ним, а вот поиск по родителям вверх не делал, подумал смысла нет. ПО умолчинию у меня в форме выставляется поиск по стране и она определяется на основании params[:locale] , по умолчнию это ru
Хотя вариант как на авито нравится больше, зашел выбрал локации ивсе

Сергей
30.03.2017
11:18:51
Звонки приехали в телеграм

Evgeny
30.03.2017
11:18:55
Но после поиска у меня идет редирект на index, и ЧПУ формируется на основании location/category
https://github.com/EvgenyKungurov/agranom/blob/master/app/controllers/ads_controller.rb

ojab
30.03.2017
11:20:01

Evgeny
30.03.2017
11:20:03
Вот так у меня если хочешь глянуть

ojab
30.03.2017
11:20:39
если "просто ничего не найдёт" — проверки на nil из Scope можно выкидывать
и в принципе не выдёргивать id, а передавать все найденные объекты

Evgeny
30.03.2017
11:21:58
Да по id походу зря я тк сделал да, что то не могу найти в тестах где я видел deprecated , Тамбыло написано что то типа use explicit id

ojab
30.03.2017
11:25:56
далее — не стоит решать задачи СУБД на стороне приложения: сейчас мы достаём *&.self_and_descendants там, где достаточно сделать один джойн. Прозреваю что у awesome_nested_set есть какой-то метод для формирования этого самого джойна (i. e. что-то в духе Model.with_descendants.find_by(:id), которое возвращает AR relation). Надо его найти заюзать.

Google

Evgeny
30.03.2017
11:26:55
Так зачем ему join, если это все одна таблица
Ну это он и делает вроде судя по логам

Admin
ERROR: S client not available

Evgeny
30.03.2017
11:27:16
только уже с готовым методом

ojab
30.03.2017
11:27:58
нам нужен AR::Relation чтобы передать его в .where и это всё выполнилось одним запросом без вытаскивания промежуточных данных на уровень приложения.
и проверок на nil

Evgeny
30.03.2017
11:30:23
Model.with_descendants.find_by(:id)
Вроде такого не было. Только просто что можно искать у объекта во все стороны, вверх, вниз
Тут и возвращается Ralation
На котором я и делал еще поиск по локации т категоирии, а так е строки поиска
ааА
Вспомнил почему я сделал return self unless location/category
Я не смог сделать так, чтобы при одном запросе типа where(location).where().etc возвращались значения
он искал по логам у меня where location NULL

ojab
30.03.2017
11:35:01
короче мы стремимся к чему-то в духе https://gist.github.com/ojab/c3bf1e3bfc2687f3ab57e4456f28cfe5 и если метода .with_descendants не существует — неплохо было бы его написать и/или выдернуть из awesome_nested_set

Dmitry
30.03.2017
11:37:14
а я для категорий и регионов вообще сохранил потомков в PostgreSQL array и из него достаю. Потому как меняются они редко
ну и весь поиск в ElasticSearch запихнул - и быстрее и проще

Evgeny
30.03.2017
11:38:07
В соседнем чате предлагали еще в ОЗУ загрузить, если мало занимает памяти и типа быстро и да если они не меняются соответсвенно

ojab
30.03.2017
11:38:11

Evgeny
30.03.2017
11:38:57
Но т.к. я самоучка и нигде не работаю, еще много не изучил, начал с pgsearch т.к. читал статью на mkdev.me

Eugene
30.03.2017
11:39:31

Google

Evgeny
30.03.2017
11:40:38
что значит C:
А улыбка
туплю

ojab
30.03.2017
11:49:11
…и неплохо бы перенести дискуссию в https://telegram.me/ruby_talks, ага
переместил

Evgeny
30.03.2017
11:53:52
Ojab СПС за критику, в свободное время попробую отрефакторить. Еще вопрос по тестам. Я написал тесты пусть и не совершенные на работу контроллеров, но не ни одного на вьюхи. Меня вот что интересует: если я сделаю тест, который будет обходить все методы всех контроллеров у которых есть вьюхи и проверю на код 200 будет ли это корректным , т.к. стал замечать что бывает не хватает переменных или в них есть ошибки, то рендер вьюхи отваливается естественно, но такой бы тест универсальный помог бы с этой проблемой , чтобы видно было сразу где что падает. Норм ли будет такое или это не очень такой подход? Нужно только проверить на работу, не что внутри

Антон
30.03.2017
12:02:29
render_views может частично решить задачу того, что вьюшка просто срендерилась без ошибок

Eugene
30.03.2017
12:02:45
я прост эту статью писал :)


ojab
30.03.2017
12:03:21
Ojab СПС за критику, в свободное время попробую отрефакторить. Еще вопрос по тестам. Я написал тесты пусть и не совершенные на работу контроллеров, но не ни одного на вьюхи. Меня вот что интересует: если я сделаю тест, который будет обходить все методы всех контроллеров у которых есть вьюхи и проверю на код 200 будет ли это корректным , т.к. стал замечать что бывает не хватает переменных или в них есть ошибки, то рендер вьюхи отваливается естественно, но такой бы тест универсальный помог бы с этой проблемой , чтобы видно было сразу где что падает. Норм ли будет такое или это не очень такой подход? Нужно только проверить на работу, не что внутри
контроллеры в общем случае тестировать вообще не стоит, вьюхи для тестирования отображения данных, интеграционные для поведения (сортировка данных в отрендеренных вьюхах и иже)
ибо интеграционные тесты в любом случае нужны, контроллерные будут их дублировать, по сути


Vasiliy
30.03.2017
12:06:12
Ojab СПС за критику, в свободное время попробую отрефакторить. Еще вопрос по тестам. Я написал тесты пусть и не совершенные на работу контроллеров, но не ни одного на вьюхи. Меня вот что интересует: если я сделаю тест, который будет обходить все методы всех контроллеров у которых есть вьюхи и проверю на код 200 будет ли это корректным , т.к. стал замечать что бывает не хватает переменных или в них есть ошибки, то рендер вьюхи отваливается естественно, но такой бы тест универсальный помог бы с этой проблемой , чтобы видно было сразу где что падает. Норм ли будет такое или это не очень такой подход? Нужно только проверить на работу, не что внутри
тоже думал над этим, не очень получиться, тебе ж надо рендерить с данными, иначе где коллекции рисуются циклу пустоту будут возвращать