ruby-on-rails - 扩展 ActiveRecord::Base

标签 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
  • 我必须在哪里保存这个文件?
  • 它需要有一个特殊的名字吗?
  • 我必须调用require吗?某处?
  • 我可以将它保存在模型文件夹中吗?
  • 模型文件夹中声明的类是否对模型文件夹中的其他类可见,而无需调用 require ?
  • 最佳答案

  • 配置/初始化程序/whatever.rb
  • 不...初始化程序在应用程序启动时加载
  • 是的。 Rails 自动加载会搜索它。

  • 做你想做的事情的rails-ish方式是:
    在 lib/encryptable.rb (或 app/models/concerns,如果你在 rails 4 上)创建一个文件,它用你的方法定义一个模块。
    然后在你的模型中你可以做include Encryptable或(对于所有模型)在初始化程序中:
    ActiveRecord::Base.class_eval do
      include Encryptable
    end
    

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

    关于ruby-on-rails - 扩展 ActiveRecord::Base,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451487/

    相关文章:

    ruby-on-rails - 访问 activeadmin 时未定义的方法 `authenticate_admin_user!'

    ruby-on-rails - "validates"什么时候执行?

    mysql - 如何修改这个查询?

    sql - rails 按多列分组

    ruby-on-rails - 无法删除_所有与 "has_many through"相关的记录

    ruby-on-rails - 最佳黑白工厂女孩、机械师和制造

    ruby-on-rails - ruby If .. Else .. End/Increment : Syntax Error

    ruby-on-rails - 在 Controller 方法 -"can' t 将 Tempfile 转换为 String 中将上传的文件读入 File 对象”

    ruby-on-rails - 不知道这段代码如何读

    ruby-on-rails - 具有非 HTTP 访问权限的 Rails 应用