如何成功继承ActiveRecord :: Base?
环境:Ruby 2.0.0,Rails 4.0.3,Windows 8.1,PostreSQL 9.3.3,Devise 3.2.4
我有一个可操作的应用程序,并希望为其添加一个全面的日志记录类。这将是一个复杂的类,它不仅记录消息,还创建一个按对象记录事务的SQL数据库。我需要在应用程序的所有类中使用此类。
为此,我想将ActiveRecord :: Base继承到类中,然后让所有其他类继承它,尽管我不打算使用STI。这在概念上似乎比在实践中简单得多,尽管我认为这种继承是一种常见的最佳实践。我错过了什么吗?
其中一个初始表是:
class Device < ActiveRecord::Base
...
end
我这样设置:
class XLog < ActiveRecord::Base
self.abstract_class = true
def initialize
end
end
class Device < XLog
...
end
在此更改之前,应用程序运行正常。在此更改后,当我登录时收到:
ArgumentError at /devices/sign_in
wrong number of arguments (1 for 0)
错误发生在:
bin/rails, line 4
bin / rails是:
#!/usr/bin/env ruby.exe
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'
Device是此应用程序中的Devise“User”类,当我尝试登录时发生错误。如果我将Device更改为继承ActiveRecord :: Base,则允许我登录并运行。
但是,每当我在其他类上调用“new”时,我就会收到另一个错误:
undefined method `[]' for nil:NilClass
对于这种继承,我肯定遗漏了一些东西。建议表示赞赏。
答案 0 :(得分:0)
initialize方法抛出错误。每次初始化子类时都会触发它并配置为接受0参数。当我删除它,整个事情开始工作。如果我需要它,我将不得不将其配置为接受可变数量的参数并按预期传递它们,我想。