
ojab
11.04.2018
07:32:43

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
либо так, либо воркер зашедулить

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
Тестировать проще.

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

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

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

Alexander
11.04.2018
10:46:37

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

Aleksey
11.04.2018
11:07:42

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

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

Артем
11.04.2018
16:10:20

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:00

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
А Presenter для контроллера есть такое? Логично? Удобно?

Roman
11.04.2018
17:20:20
аргументы - приватные методы

Google

Roman
11.04.2018
17:20:49
в вьюхе используешь все от @data
все понятно откуда что берется
Сенди Метц вообще считает что из контроллера во вьюху только одну переменную можно передавать
типичный фасад или презентер

Igor
11.04.2018
17:23:57

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

Roman
11.04.2018
17:24:21

Igor
11.04.2018
17:25:15

Roman
11.04.2018
17:25:49

Alex
11.04.2018
17:48:59

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?