扩展ActiveRecord :: Base

时间:2013-12-08 08:49:08

标签: ruby-on-rails activerecord

如果我做这样的事情:

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

1 个答案:

答案 0 :(得分:5)

  1. 配置/初始化/ whatever.rb
  2. 都能跟得上
  3. nope ...初始化程序在应用程序启动时加载
  4. 都能跟得上
  5. 烨。 Rails自动加载将搜索它。
  6. 执行你正在尝试做的事情的轨道方式是: 在lib / encryptable.rb中创建一个文件(如果你在rails 4上,则为app / models / concerns),它用你的方法定义一个模块。 然后在您的模型中,您可以在初始化程序中执行include Encryptable或(对于所有模型):

    ActiveRecord::Base.class_eval do
      include Encryptable
    end
    

    在此处阅读有关rails 4问题的更多信息:How to use concerns in Rails 4