
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?