【发布时间】:2014-06-08 17:56:02
【问题描述】:
如何成功继承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 更改为继承 ActiveRecord::Base,它可以让我登录并运行。
但是,每当我在其他类上调用“new”时,我都会收到另一个错误:
undefined method `[]' for nil:NilClass
当谈到这种继承时,我肯定错过了一些东西。建议表示赞赏。
【问题讨论】:
标签: ruby-on-rails ruby inheritance activerecord devise