Alexander
22.02.2018
10:44:41
Alex
22.02.2018
10:49:40
Alexander
22.02.2018
10:53:03
!params[:category].nil? ?
все тело метода заключено в блок if ?
unless @category ?
Alex
22.02.2018
10:54:42
Google
Nikita
22.02.2018
10:54:53
@category = find_by_slug!(params[:category]) if params[:category].present?
Alexander
22.02.2018
10:55:36
!params[:category].nil? и unless @category - по сути то же двойное отрицание
хотя с unless спорный варинт, у меня в мозгу он звучит "если не категория"
по моему гораздо проще понять условие "если категория есть" (if category.present?)
def define_category
return if params[:category].nil?
@category = ...
render '404' if @category.blank?
end
самое простое что можно сделать
Антон
22.02.2018
11:00:43
вообще рендера не должно быть в методе define_category
либо метод должен называется render_defined_category
Alex
22.02.2018
11:01:32
Nikita
22.02.2018
11:01:47
Антон
22.02.2018
11:02:41
я бы написал @category = find_by_slug!(params[:category)
все
Alexander
22.02.2018
11:02:42
Антон
22.02.2018
11:02:58
ну значит стопор должен возникать в основном экшене
Alexander
22.02.2018
11:04:22
Антон
22.02.2018
11:05:41
вот именно ?
Google
v
22.02.2018
11:05:45
о боже
что это за паскаль
Антон
22.02.2018
11:06:04
турбо
Alex
22.02.2018
11:08:52
спасибо Никите)
@category = PortfolioCategory.find_by!(slug: params[:category]) if params[:category].present?
Антон
22.02.2018
11:15:51
ну нельзя же так
1) метод который определяет категорию должен определять категорию, даже если нет параметра по которому нужно определять категорию
2) если такой параметр nil/blank/whatever то категории просто не будет - это условие не нужно
3) метод который определяет категорию не должен ничего знать об операциях которые нужно произвести, это не его обязанность - не нужно вносить путанницу
4) в потребляющем методе, которому нужна эта категория нужно написать return render 404 unless category, и это будет его законное место
pny
22.02.2018
11:18:51
Ух, опять пришел когда дьячук годные вещи говорит
Антон
22.02.2018
11:19:21
ojab просто ленится сегодня
Nikita
22.02.2018
11:20:22
1) согласен
2) нет
3) согласен
4) вовсе не обязательно
можем вытащить записи, где значение поля удовлетворяет условию IS NULL
в то время как проверка present? такую возможность исключит
4 - зачем делать render 404, если есть механизм исключений?
Антон
22.02.2018
11:25:41
это другой вопрос
Nikita
22.02.2018
11:26:59
Разве ActiveRecord::RecordNotFound не рендерится в 404?)
Антон
22.02.2018
11:27:02
Nikita
22.02.2018
11:27:54
аналогично, но на 95% уверен, что рендерится в 404)
Google
Антон
22.02.2018
11:28:25
значит вообще ничего не нужно писать кроме find_by!
Aleksey
22.02.2018
11:28:30
обработка исключений работает медленнее чем render 404, это по сути главная разница )
Антон
22.02.2018
11:28:55
подумаеш, куплю еще сервер ?
Nikita
22.02.2018
11:29:00
Да неужели)
И насколько же медленнее?)
Aleksey
22.02.2018
11:29:48
где-то видел сравнение одинакового кода, где выбрасывался экспешен и ретурн по условию
разница там в сотни раз
если не в тысячи. понятно что для клиента с запросами раз в минуту это неважно
просто вспомнилось
Nikita
22.02.2018
11:30:30
Замерю прямо сейчас
быть такого не может никак)
Aleksey
22.02.2018
11:32:05
тут сравнивается с throw/catch, но суть ясна - https://jacopretorius.net/2012/01/catch-and-throw-in-ruby.html
Nikita
22.02.2018
11:33:24
разница менее чем в десять раз
по данным, приведенным в статье
Aleksey
22.02.2018
11:33:35
я говорил про return а не про throw
+ ессно чем больше стектрейс тем медленее
Alex
22.02.2018
11:40:25
Антон
22.02.2018
11:41:25
ⰿⰰⰾⱏ
22.02.2018
11:43:33
Nikita
22.02.2018
11:43:51
Не согласен
Google
Nikita
22.02.2018
11:44:05
Если есть механизм для удобства, надо пользовать
так можно оправдать что угодно, любой неэффективный подход
Vasiliy
22.02.2018
11:45:30
не всегда эффективно == производительно
Nikita
22.02.2018
11:45:38
рельсы не для производительности
ⰿⰰⰾⱏ
22.02.2018
11:45:53
let's holiwar begin?))
Vasiliy
22.02.2018
11:47:14
*руби
Nikita
22.02.2018
11:47:56
ага
Vasiliy
22.02.2018
11:48:41
пока не выйдет 3 версия
Nikita
22.02.2018
11:50:44
Имхо, есть механизм исключений, он очень гибкий. Не пользовать его в рельсах глупо. В конце концов, все эти find!, find_by!, find_by_field! сделаны специально для того, чтобы все было красиво и лаконично.
Sergey
22.02.2018
11:54:26
Подскажите, пожалуйста
как лучше всего оформить тест, если у меня для разных моделей похожая валидация, только разный describe блок с ассоциациями?
Vasiliy
22.02.2018
11:54:37
ну там же изначально было что х3 по сравнению с 2 версией
Sergey
22.02.2018
11:55:08
shared_examples_for ?
Антон
22.02.2018
11:55:11
Vasiliy
22.02.2018
11:55:24
https://relishapp.com/rspec/rspec-core/docs/example-groups/shared-context
Sergey
22.02.2018
11:55:45
Стоит
ⰿⰰⰾⱏ
22.02.2018
11:55:51
Vasiliy
22.02.2018
11:56:11
для валидаций крутая штука shoulda matchers есть
Google
Антон
22.02.2018
11:56:14
а что за валидация такая, которую нельзя протестировать отдельно от модели?
Ivan
22.02.2018
11:57:15
Антон
22.02.2018
11:57:28
искушаете?)
да, каждый раз искушаюсь когда кто-то тестирует рельсовые валидации
Sergey
22.02.2018
11:58:06
А зачем отдельно? Сейчас в разных моделях валидации дублируются, потому что люди любят писать валидаторы отдельно, вот и нужно проверить
Ну, это и нормально, чтобы писать отдельно, их просто уже очень много. Но когда тестов нет - начинаются такие проблемы
Пойдут люди по такой дорожке как вы предлагаете
И сиди потом разгребай
Антон
22.02.2018
11:59:06
я тогда что-то не понимаю
нужно проверить что у модельки есть валидация? протестировать валидацию? или что?
pny
22.02.2018
12:00:22
ну вдруг рельсовая валидация не работает!
Sergey
22.02.2018
12:00:39
Простетировать что валидация выводит нужный текст в нужном количестве
pny
22.02.2018
12:02:11
Это так важно?
Sergey
22.02.2018
12:02:19
Ладно, только время тратить, одни тролли какие-то
Спасибо, @vasivas
ojab
22.02.2018
12:03:07
pny
22.02.2018
12:04:31
Уважаемые доны тебе помочь всей душой хотят, а ты в троллинге обвиняешь. Не хорошо.
Ivan
22.02.2018
12:06:45
Vasiliy
22.02.2018
12:07:06
вродь как да
ojab
22.02.2018
12:11:45
Roman
22.02.2018
12:34:07
Всем привет, какой-то затуп. Можно как-то получить одним запросом, допустим, всех юзеров с уникальными именами?
Vasiliy
22.02.2018
12:36:02
UNIQUE?