扩展ActiveRecord::Base

4
如果我创建了这样的一个东西:
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. 我可以把它保存在model文件夹中吗?
  5. 如果在model文件夹中声明一个类,其他在model文件夹中的类是否可见,而不需要调用require
1个回答

5
  1. config/initializers/whatever.rb
  2. 不行
  3. 不行... initializers在应用启动时加载
  4. 不行
  5. 是的。Rails自动加载会搜索它。

所以你想做的rails方式是: 在lib/encryptable.rb中创建一个文件(如果你在rails 4上,则可以在app/models/concerns下),其中定义了一个包含你的方法的模块。 然后在你的models中,你可以执行include Encryptable或者(对于所有models)在初始化器中:

ActiveRecord::Base.class_eval do
  include Encryptable
end

在这里阅读更多关于Rails 4中concerns的内容:如何使用Rails 4中的concerns


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接