【问题标题】:How to successfully inherit ActiveRecord::Base?如何成功继承 ActiveRecord::Base?
【发布时间】: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


    【解决方案1】:

    初始化方法抛出错误。每次初始化子类并配置为接受 0 个参数时都会触发它。当我删除它时,整个事情开始工作。如果我需要它,我猜我必须将它配置为接受可变数量的参数并按预期传递它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多