@proRuby

Страница 1167 из 1594
Ruslan
11.04.2018
07:41:57
тем что никак не отследить как был вызов, лучше делать явно сервисные классы для всех твоих нужд, и явно вызывать то, что нужно сделать, без калбеков.

с калбеками проект даже среднего размера превратиться в такую Ж что потом офигеть можно будет

максимум для чего можно сделать калбек, это к примеру для генерации SLUG у записи

Google
Black
11.04.2018
07:43:31
И чем это плохо?
Он скорее всего имеет ввиду что сам before_create не плох, а плох большая реализация через него, например, после добавления одного элемента должны вслед за ним добавляться и другие, вот реализовать это через before_create это плохо. Но если касается самого объекта и это мелочи, то можно делать это через before, например, тебе надо сохранить имя большими буквами, тогда делаешь через before

ojab
11.04.2018
07:43:57
ну там явно написано потому что before_save в скоупе транзакции

так что понятно, что имеется в виду

непонятно почему

Black
11.04.2018
07:50:07
Например, допустим при создании элемента A нужно создать и элемент B, а для этого в модели A через after_create ты прописываешь код создания элемента B. И ты создаешь элементы A в контроллере когда хочешь и сколько хочешь, и все работает как нужно. Но может прийти новый программист и создавать элементы A для других целей, а он и не заметит что создаются элементы B.

ojab
11.04.2018
07:54:36
Но тут не надо создавать никакие B, а надо выставить аттрибут у А. И непонятно, почему это плохо в скоупе транзакции, и неплохо вне это скоупа.

Anna
11.04.2018
09:30:16
Доброго времени всем! Горит диссер, нужна помощь технарей?? Собираю данные для исследования, не хватает людей в выборке профессий типа человек-знаковая система. Что нужно? Пройти тест, достаточно объемный, не самый веселый, займёт около 30 минут. Очень прошу потратить немного вашего времени и помочь мне в моем деле! В ответ буду очень признательна! https://goo.gl/BV415T Участие в исследовании добровольное, если вы устали проходить тест или вам надоело, просто закройте ссылку

Roman
11.04.2018
10:14:38
Как вызвать rake task с админки, по нажатию на кнопку ?

Alex
11.04.2018
10:26:18
Как вызвать rake task с админки, по нажатию на кнопку ?
хочешь чтобы у тебя админка подвисла пока rake task выполняется?

либо так, либо воркер зашедулить

Damir
11.04.2018
10:27:59
запили в виде сервиса/команды и вызывай из таска/контроллера

Alex
11.04.2018
10:28:48
зачем это в сервис инкапсулировать не очень понятно.

Roman
11.04.2018
10:31:10
Google
Roman
11.04.2018
10:31:28
он хочет управлять процессом

Alex
11.04.2018
10:32:26
Rake::Task['db:migrate'].reenable # in case you're going to invoke the same task second time. Rake::Task['db:migrate'].invoke

Roman
11.04.2018
10:37:53
предлагаешь все-таки делать таск, и вызывать с помощью invoke?

Alex
11.04.2018
10:38:42
предлагаешь все-таки делать таск, и вызывать с помощью invoke?
Если оно ЕЩЕ НЕ таска - лучше вынести в сервис.

Тестировать проще.

Roman
11.04.2018
10:39:44
еше не таск, но логика такая: Достаем список сущностей - вызываем сервис для каждой

Alex
11.04.2018
10:41:12
это обязательно надо инкапсулировать?

Roman
11.04.2018
10:44:54
бизнес-логика какая - выплата депозита по каждому юзеру. Если что-то отвалится в процессе, то можно будет продолжить с того момента, где оборвалось. выплата по одному юзеру - это сервис

выплату по всем инкапсулировать не обязательно

Igor
11.04.2018
11:00:33
всем привет ребят если есть надобность в i18n для определенных таблиц, то есть записи в ней могут быть в нескольких языках, как лучше это реализовать? (учитывая что в перспективе количество языков вырастет) для каждого языка создавать новую запись ? и как её связывать с конкретным языком ? создать ещё одну таблицу и сделать reference, или хранить языковую аббревиатуру будет более предпочтительно ?

Igor
11.04.2018
11:15:12
Dmitry
11.04.2018
15:41:27
ребят, никогда не работал с енамами в хуках

это норм, что я получаю вечный луп, когда меняю их в before_create?

псевдокод

class User < ApplicationRecord enum activation_state: %i[pending active] before_create :change_state private def change_state self.pending! end end

получаю ошибку stack level too deep

и луп запросов, которые он пытается сделать 1 за другим

Google
ojab
11.04.2018
15:44:44
pending! вызывает update!, который вызывает create!, очевидно.

(который вызывет коллбек, да)

Dmitry
11.04.2018
15:45:17
оу

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

ojab
11.04.2018
15:48:27
нет, достаточно написать state = :pending вместо self.pending!

Dmitry
11.04.2018
15:48:43
enum activation_state: [ PENDING = 0, ACTIVE = 1 ]

ojab
11.04.2018
15:50:00
окей, тогда сначала надо почитать документацию по rails enum и сделать по-нормальному.

Dmitry
11.04.2018
15:50:34
ну и activation_state = PENDING

чем то, что выше я написал не нормально? Не так, как в доках рельс? Так многое лучше делать не так, как в доках ?

ojab
11.04.2018
15:54:10
код enum activation_state: [ PENDING = 0, ACTIVE = 1 ] делает непонятно что и вряд ли ты на самом деле понимаешь, что он делает.

Dmitry
11.04.2018
15:55:33
код enum activation_state: [ PENDING = 0, ACTIVE = 1 ] делает непонятно что и вряд ли ты на самом деле понимаешь, что он делает.
присваивание возвращает значение присваивания, следовательно я говорю, что значения енама могут быть 0 и 1. Работает также. Ключевой недостаток - потом AR вернёт 0 вместо внятного описания состояния

ojab
11.04.2018
15:56:06
а зачем ты тут константы PENDING и ACTIVE объявляешь?

Dmitry
11.04.2018
15:57:18
в проекте не принят какой либо стайлгайд поэтому не важно где их обозначать

ojab
11.04.2018
15:57:30
а зачем они тебе нужны?

просто так чтоб были?

Dmitry
11.04.2018
15:57:48
а что мне скажут 0 и 1 в коде?

ojab
11.04.2018
15:58:15
А чем enum activation_state: %i[pending active] не устроил?

Dmitry
11.04.2018
15:59:23
я в итоге так и сделал, потому что обьявил константы не подумав, что потом они будут транслироваться в те же цифры, которые непонятно что означают и заставят писать дополнительные проверки и глобално хранить названия состояний.

Black
11.04.2018
16:39:59
Коллеги погромисты, вопрос такой: если в экшенах контроллерах есть одинаковые переменные присваивания, то как заDRYить?

Google
Black
11.04.2018
16:40:28
А точнее не одна переменная, а несколько.

Максим
11.04.2018
16:59:34
Бифо экшн: сет_вараябл

Vasiliy
11.04.2018
16:59:37
Вообще лучше вместо рельсового енама возьми сразу асм

Максим
11.04.2018
16:59:55
И в приватном методе сет_вараябл устанавливает нужные щначения

Admin
ERROR: S client not available

Roman
11.04.2018
17:03:46
Бифо экшн: сет_вараябл
вот не люблю такое. обычно делаю в каждом экшне @var = var сам метод приватным делаю или даже просто def var @var ||= end

Roman
11.04.2018
17:13:14
Roman
11.04.2018
17:13:56
Roman
11.04.2018
17:14:02
допустим у тебя есть какая-то штука типа @post = Post.find(params[:id])

и она в трех экшнах

соответственно я делаю метод def post @post ||= Post.find... end

Black
11.04.2018
17:14:51
Ребята, это когда не одна переменная, а три и более...

Roman
11.04.2018
17:14:55
и везде его использую

иначе потом сложно понять откуда что берется

Black
11.04.2018
17:17:21
иначе потом сложно понять откуда что берется
Тогда и так сложно понять что откуда берется. Смотришь на контроллер - там пусто, открываешь view - а там три переменных.

А Presenter для контроллера есть такое? Логично? Удобно?

Roman
11.04.2018
17:20:20
А Presenter для контроллера есть такое? Логично? Удобно?
ну можно что-то типа def show @data = Presenter.new(post, current_user, some_other) end

аргументы - приватные методы

Google
Roman
11.04.2018
17:20:49
в вьюхе используешь все от @data

все понятно откуда что берется

Сенди Метц вообще считает что из контроллера во вьюху только одну переменную можно передавать

типичный фасад или презентер

Black
11.04.2018
17:24:07
Типичный фасад - имеешь ввиду декоратор?

Roman
11.04.2018
17:24:21
Можно хэш или OpenStruct передать)
ну да. это уже детали имплементации

Типичный фасад - имеешь ввиду декоратор?
фасад, декоратор, презентер - это все примерно одно и то же. одно является частным случаем или реализацией другого

Igor
11.04.2018
17:25:15
ну да. это уже детали имплементации
Это был шутка. Передавать хэш тоже самое, что передать много переменных. У хэша нет интерфейсас. Как и у OpenStrcut

Oleg
11.04.2018
17:54:34
да, хеш не годится. опенстракт имеет интерфейс же
Он меняется на лету, не считается

Dmitry
11.04.2018
19:20:02
Какой гем используете для geoip?

Vasya
11.04.2018
19:21:00
Есть georuby

Dmitry
11.04.2018
19:23:51
и как я в нём могу получить страну, город по ip?

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