2013-12-08 2 views
4

Если я сделать что-то вроде этого:Расширение ActiveRecord :: Base

class ActiveRecord::Base 
    def self.encrypt(*attr_names) 
    encrypter = Encrypter.new(attr_names) 

    before_save encrypter 
    after_save encrypter 
    after_find encrypter 

    define_method(:after_find) { } 
    end 
end 
  1. Где я должен сохранить этот файл?
  2. Нужно ли иметь специальное имя?
  3. Нужно ли мне звонить require?
  4. Могу ли я сохранить его в папке с образцом?
  5. Является ли класс объявленным в папке модели видимым из других классов в папке модели без вызова require?

ответ

5
  1. конфигурации/Инициализаторы/whatever.rb
  2. Нету
  3. Нету ... Инициализаторы загружаются при загрузке приложения
  4. Нету
  5. Угу. Rails autoload будет искать его.

Рельсы-иш способ делать то, что вы пытаетесь сделать, это: создать файл в LIB/encryptable.rb (или приложение/модели/проблемы, если вы по рельсам 4), который определяет модуль с вашими методами. Тогда в ваших моделях вы можете сделать include Encryptable или (для всех моделей) в инициализаторе:

ActiveRecord::Base.class_eval do 
    include Encryptable 
end 

подробнее о рельсах 4 касается здесь: How to use concerns in Rails 4

Смежные вопросы