Другие ответы относятся к вызову methods
, который возвращает все методы, включая те, которые не являются атрибутами. Альтернативный подход заключается в использовании attributes
, который возвращает атрибуты модели, за исключением того, что он не включает ее виртуальные атрибуты.
Если они известны, то добавление в модель что-то вроде приведенного ниже может помочь:
VIRTUAL_ATTRIBUTES = %i{foo bar baz}
VIRTUAL_ATTRIBUTES.each { |a| attr_accessor a } # create accessors
def attributes
VIRTUAL_ATTRIBUTES.each_with_object(super) { |a,h| h[a] = self.send(a) }
end