Из Go в Rails: как ...
 
Уведомления
Очистить всё

Из Go в Rails: как найти, где определён метод, которого нет в коде?

4 Сообщения
4 Пользователи
5 Реакции
407 Просмотры
tatiana.golubeva
Сообщения: 5
Автор темы
Дружит с bundler бэкенд-разработчица
Присоединился: 1 год назад
[#84]

Три года писала на Go, с января на Rails 8.0, проект на MySQL, тесты на Minitest. Самое тяжёлое не синтаксис, а то, что я вижу вызов order.customer_email и не могу найти, где он определён. Поиск по проекту ничего не даёт, а потом оказывается, что это delegate в concern, подключённом в модель через три уровня. Как вы находите, откуда растут методы?


3 ответа
kostya.sokurov
Сообщения: 73
Держит прод бэкенд-разработчик, senior
Присоединился: 4 года назад

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 прошёл класс.


Ответ
artem_67
Сообщения: 18
Пишет тесты разработчик на Go
Присоединился: 4 года назад

В Go ты бы просто нажала «перейти к определению», и всё. Вот за это я Rails и не люблю: половина кода появляется только в рантайме.


Ответ
1 ответ
Валерий40
Присоединился: 4 года назад

Читает чужие PR фулстек-разработчик
Сообщения: 33

Автор: artem_67
половина кода появляется только в рантайме

В Laravel фасады устроены так же, и ничего, живут. «Перейти к определению» в редакторе с ruby-lsp работает для большинства методов, кроме самой динамики. А для неё есть source_location, к нему быстро привыкаешь.


Ответ