@rubylang

Страница 960 из 1684
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
а вдруг автор полный кукумбер?)

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
Пытаюсь стрелять их пушки по воробьям

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

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

ojab
30.03.2017
10:46:42
Пытаюсь стрелять их пушки по воробьям
.id никогда не стоит вытаскивать для запросов, AR замечательно работает и с объектами (i. e. where(location: Location.find_by(…))

Demyan
30.03.2017
10:47:11
Пытаюсь стрелять их пушки по воробьям
бросать костылем в воробья)

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

Зачем там Scopes в отдельном классе и FindAds в отдельном классе? Что мешает это в модели сделать? return Ad.none unless @location_id — почему в таком случае это не метод у Location (i. e. Location.find(id).ads.where(…))?
Тут дело вот в чем. У меня есть ajax запрос, который ищет отдельно города, еще запрос на поиск категорий, они все формируют динамические select, которые потом выбираешь уже. А поиск объявлений у меня использует отдельный класс

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
+непонятно что есть self_and_descendants и зачем оно нужно
Это методы awesome_nested_sets, он ищет детей данного родителя.

ну и, заодно, wtf search()
Это метод назва я, но он связан с гемом PGSearch

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

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
а я для категорий и регионов вообще сохранил потомков в PostgreSQL array и из него достаю. Потому как меняются они редко
если много уровней — ничего по большому счёту не изменится, в любом случае нужны self-join'ы

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

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
ибо интеграционные тесты в любом случае нужны, контроллерные будут их дублировать, по сути

Страница 960 из 1684