Ruby: Как добавить методы в Object? (или просто расширить класс объекта)

Я хочу расширить Object, чтобы добавить несколько методов.

так что я могу сделать @object.table_name, а не @object.class.name.tableize

и тому подобное.

Я использую Ruby 1.8.7 и Rails 2.3.8, так что, может быть, такие вещи будут в папке lib как модуль? Я не знаю.


person NullVoxPopuli    schedule 10.08.2011    source источник
comment
Object — это не тот класс, который вы хотите изменить.   -  person Andrew Grimm    schedule 11.08.2011


Ответы (2)


# object.rb
class Object
  def table_name
    self.class.name.tableize
  end
end

поместите его в папку /config/initializers или в папку lib (в этом случае вам нужно будет включить его в папку ApplicationController).

person fl00r    schedule 10.08.2011
comment
Альтернативой (если метод еще не существует) является помещение метода в модуль и включение модуля в класс). - person Andrew Grimm; 11.08.2011

Идиома, которую вы иногда встретите для делегирования методов экземпляра классу, такова:

delegate :table_name, :to => 'self'
person numbers1311407    schedule 10.08.2011