@proRuby

Страница 540 из 1594
Alex
10.05.2017
21:00:52
я кстати хуевый разработчик, вы меня не слушайте если чо.

Lupsick
10.05.2017
21:01:02
ну например

вот у тебя есть User.find(id)

Google
Lupsick
10.05.2017
21:01:22
и оно по идее должно выбрасывать raise если юзера нет

ну или какую-то ошибку вообще

да?

Alex
10.05.2017
21:01:34
ActiveRecord::RecordNotFound

Lupsick
10.05.2017
21:01:42
ну типа

и оно по идее должно в нескольких местах использоваться

нужно это выделять в сервис?

Alex
10.05.2017
21:02:21
нет ) есть rescue_from в ApplicationController, есть тесты.

Это базовые вещи рельсы, тут не нужны сервисы.

Lupsick
10.05.2017
21:02:33
ну так это будет дублирование кода

Alex
10.05.2017
21:02:37
мм, почему?

тесты да, но тесты и должны дублироваться на случай херовых абстракций.

Lupsick
10.05.2017
21:02:51
ну я не хочу твой ActiveRecord::RecordNotFound

Google
Lupsick
10.05.2017
21:03:00
я хочу чтобы мне писались ошибки текстом на разных языках

Alex
10.05.2017
21:03:03
хочешь ты его или не хочешь, AR его сам кидает.

Lupsick
10.05.2017
21:03:14
бля

мой пример конь в вакууме

Alex
10.05.2017
21:04:17
ну есть у тебя render_not_found в ApplicationController, дальше если нужны персонализированные ошибки (зачем?) то просто переопределяешь в дочернем контроллере.

Чтобы не потерять такое поведение - есть тесты.

Lupsick
10.05.2017
21:05:02
так давай другой пример

вот есть типа код thread = Thread.where(uuid: uuid).take unless thread raise "Thread #{uuid} not found" end

мне нужно проверять, что пришел uuid и я хочу ошибки

и аналогичный код существует и в админке и в юзерской части

thread – это тред с постами, а не тред операционной системы

Aleksey
10.05.2017
21:08:29
не очень правильно только так модели называть)

Lupsick
10.05.2017
21:10:25
да похуй

Models::Thread

Aleksey
10.05.2017
21:11:06
Alex
10.05.2017
21:11:07
class ApplicationRecord < ActiveRecord::Base def seek_by(args = {}) self.where(args*).first || raise ActiveRecord::RecordNotFound end end class Thread < ApplicationRecord end class ApplicationController < Rails::Controller rescue_from ActiveRecord::RecordNotFound do render_not_found end def render_not_found render json: { error: I18n.t('record_not_found') }, status: :not_found end end class ThreadController < ApplicationController def show render Thread.seek_by(thread_show_params) end def thread_show_params params.permit(:id, :name) end end

Lupsick
10.05.2017
21:11:57
ну вообще не обязательно что этот код участвует только в show

Alex
10.05.2017
21:12:04
Ну это пример, чтобы была ясна мысль.

Я бы в рельсе вот так наговнокодил.

Google
Lupsick
10.05.2017
21:12:33
твоя мысль разбивается о то, что этот код должен быть использован в нескольких местах сразу

Aleksey
10.05.2017
21:12:42
ну а если это действительно не show?

Alex
10.05.2017
21:12:54
не понимаю проблемы. Тебе не нравится что тут rescue_from который в других местах не работает?

ну так в других местах логика 404 может отличаться.

Alex
10.05.2017
21:13:39
схуя
почему нет то?

Lupsick
10.05.2017
21:13:41
если нет треда с этим uuid, то оно должно прекращать дальнейшее выполнение

Alex
10.05.2017
21:13:53
если она не отличается, у тебя все контроллеры наследуются от ApplicationController, и все просто работает.

Lupsick
10.05.2017
21:13:59
мне много что не нравится так-то

мне не нравится что ты не проверяешь что это uuid

мне не нравятся permitted params

мне не нравится, что код нельзя переиспользовать

Lupsick
10.05.2017
21:14:41
Зачем?
это пример, там может быть много разной логики над параметрами

Alex
10.05.2017
21:14:48
если это ДЕЙСТВИТЕЛЬНО так критично, то uuid в роутах через регексп проверяется, лол.

Lupsick
10.05.2017
21:14:50
Где и ради чего?
в разных экшенах

Alex
10.05.2017
21:14:59
это тоже пример, его можно переписать под задачу кучей разных способов.

Alex
10.05.2017
21:15:50
О хоспаде, ты просто пытаешься свой пример обставить столькими условиями, чтобы я наконец выдал точку зрения которую ты хочешь.

Google
Alex
10.05.2017
21:16:13
Я не люблю в таком контексте вести дискуссию. Такого рода задачи решаются разными способами.

Aleksey
10.05.2017
21:16:53
действительно, уже пора заканчивать, все всем понятно)

Lupsick
10.05.2017
21:16:55
нет

это реальная жизнь

Aleksey
10.05.2017
21:17:07
все хорошо в меру

Lupsick
10.05.2017
21:17:45
get '/boards/:dir' do result = GetBoard.call(board_dir: params[:dir]) if result.error json_error(result.error) else coercion = Types::Board json(coercion[result.board]) end end put '/boards/:dir/fav' do result = FavoriteBoard.call(board_dir: params[:dir], user: current_user) if result.error json_error(result.error) else coercion = Types::Board json(coercion[result.board]) end end вот как это решается через use-case-driven development

Alex
10.05.2017
21:17:46
По слухам, российское B2B API такое веселое, что обычное рельсовое приложение будет просто замечательной сказкой.

> вот как это решается через use-case-driven development Это решается через твои любимые сервис объекты.

Это не единственный подход.

Lupsick
10.05.2017
21:18:55
class FavoriteBoard include Interactor::Organizer before do result = GetBoard.call(board_dir: context.board_dir) if result.failure? context.error = result.error context.fail! else context.board = result.board context.favorite_id = result.board.id context.favorite_type = 'Models::Board' end end organize CreateFavorite end

Admin
ERROR: S client not available

Alex
10.05.2017
21:19:14
интерактор кстати классный да, но в реальных проектах не юзал еще.

вот только это не значит что его надо во все щели пихать.

Lupsick
10.05.2017
21:19:49
ну я тебе видос кинул

2011 год чувак рассказывает про такой подход

Alex
10.05.2017
21:20:01
Ты его сам не смотрел ))

Lupsick
10.05.2017
21:20:09
посмотрел

Alex
10.05.2017
21:20:44
Я грю, подходы разные бывают, везде свои плюсы и минусы.

Lupsick
10.05.2017
21:21:09
подход рельсы это большой минус

Google
Alex
10.05.2017
21:21:11
Плюсы рельсы - быстро наговнокодить прототип, пожалуй самое быстрое что только есть.

Lupsick
10.05.2017
21:21:16
оно работает для маленьких проектов

ну да

тут я согласен

чем больше оно становится тем меньше оно работает

как парадигма

Alex
10.05.2017
21:21:52
это капитанство какое то, всем кто с рельсой работал какое то время это очевидно.

Lupsick
10.05.2017
21:22:19
оказывается нихуя не всем

Alex
10.05.2017
21:22:22
прикол в том что если по быстрому не наговнокодить, то пилить божественную архитектуру будет некому, т.к денег не будет и проекта не будет.

Ты же сам любишь про реальный мир говорить.

Lupsick
10.05.2017
21:22:31
я ж говорю чуваки экшен дергают и данные ему передают

из кода

Alex
10.05.2017
21:22:40
ну это гавнокодеры прост.

Lupsick
10.05.2017
21:22:57
ну вот как человеку сказать что так делать нельзя?

Alex
10.05.2017
21:23:12
если человек не понимает нормальных слов, то может попрощаться с человеком?

Lupsick
10.05.2017
21:23:23
ну я думаю его можно обучить

Alex
10.05.2017
21:23:25
исправлять может выйти очень дорого и долго, а потом он умный - убежит куда еще.

Lupsick
10.05.2017
21:23:26
просто нужны авторитеты

вот такое видео – это авторитет

а ну и я тебе говорил что это наш сто

Alex
10.05.2017
21:24:11
ну экшен дергать из кода это гавнокод же. Это должно быть очевидно

Lupsick
10.05.2017
21:24:15
еще там мании к god object

Alex
10.05.2017
21:24:24
лучший способ отучить - подставить так, чтобы явно было видно почему так лучше не делать.

Страница 540 из 1594