добавление методов класса в ActiveRecord :: Base - PullRequest
0 голосов
/ 27 мая 2010

Я создал метод экземпляра, который также является обратным вызовом (если это имеет смысл), который делает некоторые вещи, которые не имеют значения. Я хотел бы иметь возможность просто позвонить:

class Model < ActiveRecord::Base
  fix_camelcase_columns  
end

Вместо этого на данный момент у меня есть это:

def after_find
  self.class.columns.each do |column|
    self.instance_eval("def #{column.name.to_underscore}; self.#{column.name}; end;")
  end
end

Я бы хотел абстрагировать это и использовать его в других классах. Есть указатели?

1 Ответ

2 голосов
/ 27 мая 2010

Ну, вы можете открыть ActiveRecord::Base и добавить туда метод:

class ActiveRecord::Base
  def self.fix_camelcase_columns
    define_method :after_find do 
      ...
    end
  end
end

Для более чистого способа создайте модуль:

module CamelcaseFixer
  def self.included(base)
    base.extend(self)
  end

  def fix_camelcase_columns
    define_method :after_find do
      ...
    end     
  end
end

и затем в вашей модели сделайте

class Model < ActiveRecord::Base
  include CamelcaseFixer
  fix_camelcase_columns  
end

Не тестировал код, посмотрите, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...