Уведомления
Очистить всё
Новичкам
4
Сообщения
4
Пользователи
5
Реакции
407
Просмотры
21 июля 2025 07:27
Три года писала на Go, с января на Rails 8.0, проект на MySQL, тесты на Minitest. Самое тяжёлое не синтаксис, а то, что я вижу вызов order.customer_email и не могу найти, где он определён. Поиск по проекту ничего не даёт, а потом оказывается, что это delegate в concern, подключённом в модель через три уровня. Как вы находите, откуда растут методы?
3 ответа
21 июля 2025 07:38
Ruby сам знает, где определён метод, его достаточно спросить в консоли:
order = Order.first
order.method(:customer_email).source_location
# => ["/app/app/models/concerns/billable.rb", 12]
order.method(:customer_email).owner
# => Billable
Это работает и для delegate. Для ассоциаций покажет файл внутри Rails, и сразу понятно, что метод сгенерирован. А Order.ancestors покажет, через какие concerns прошёл класс.
21 июля 2025 17:50
В Go ты бы просто нажала «перейти к определению», и всё. Вот за это я Rails и не люблю: половина кода появляется только в рантайме.