TGViewer
Анна Буянова (Anna Codes) Анна Буянова (Anna Codes) @anna_codes · 566 subscribers
Post #275 1.05K
Прочитали и обсудили третью главу, там не так много информации, поэтому напишу про globalid (тоже тема из книги).

Знали про такую штуку?

Универсальный идентификатор для моделей, вида gid://YourApp/Some::Model/id

Основной юзкейс - замена сериализации в отложенных джобах. Будет использоваться, если вы передадите в джобу ar-объект.
Вы этого даже не увидите, но работает так:

Создаётся объект:

[3] pry(main)> gid = u.to_global_id
=> #<GlobalID:0x000074a394a41f58 @uri=#<URI::GID gid://practical-developer/User/12>>


Вместо десериализации - вытащит ar-объект через find:
[15] pry(main)> GlobalID::Locator.locate gid
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 12], ["LIMIT", 1]]
=> #<User id: 12, apple_username:


find прямо прописан в геме в дефолтном локаторе, но можно написать свой (смотрите в ридми гема или в книге).
Круто, конечно, но по мне так лучше AR-объекты в джобы не передавать, а явно передать идентификатор и явно достать из бд (в стандартном случае).

Помните ещё в delayed_job можно было? Вообще не писать джобу, а сделать так:

(примеры из доки)
# without delayed_job
@user.activate!(@device)

# with delayed_job
@user.delay.activate!(@device)


Или так:

class Device
def deliver
# long running method
end
handle_asynchronously :deliver
end

device = Device.new
device.deliver


А потом ловить ошибки, что у вас уже нет соответствующих записей на момент выполнения джобы.
Это вообще зло, есть соблазн для разработчиков лепить, не думая, а потом разгребать. Как-то выпиливала всё это с девту (потом ещё саму dj)
То же и с передачей ar-объектов.

Тот случай, когда явное лучше скрытого. GlobalID, может быть, для других случаев подойдёт? Расскажите, для каких, если пользуетесь.

И в целом что думаете по поводу явного/скрытого здесь?

#layered_rails #rails
#книжный_клуб@anna_codes
GitHub GitHub - rails/globalid: Identify app models with a URI Identify app models with a URI. Contribute to rails/globalid development by creating an account on GitHub.
  • 👍 7
  • ❤ 2
More from @anna_codes
  1. Sep 20, 2026#AI Ничего необычного - просто claude code стал поддерживать AGENTS.md ссылка на твит - ht…
  2. Sep 20, 2026Выпиливаем CLAUDE.md ✂️
  3. Sep 19, 2026📘 Balancing Coupling: теория vs практика📘 Основная идея книги - формула баланса для оцен…
  4. Sep 12, 2026Рой ai-агентов взломал rubygems (аж в мае) 🍿, обсуждаем сейчас. Что произошло: - в мае аг…
  5. Sep 11, 2026Недавно вступила в лид-сообщество от @leadsnotes, немного на вырост. Для меня полезно: кон…
  6. Sep 9, 2026В конце августа провела встречу на тему менторства в сообществе code_sisters 👩‍💻 Участву…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →