Используйте хук method_added
, который добавляет имена методов в список, и обезьяна-патч Active Record, чтобы методы, добавленные AR, не добавлялись в этот список.
Если вы не хотите открывать AR и начинать ковыряться, вы также можете определить «макрос класса», который определяет метод , и добавляет его в список. Для ваших собственных пользовательских методов используйте макрос класса, а не def
.
Если вы не знакомы с тем, что я называю «макросом класса», это просто метод, подобный этому:
class Class
def mydef(name,&block)
(@methods || []) << name
define_method(name,&block)
end
end
Использовать что-то вроде mydef
для определения методов, а не def
, безусловно, некрасиво, но это решило бы проблему, не требуя каких-либо махинационных исправлений.