相关疑难解决方法(0)

如何在ruby中实现抽象类?

我知道ruby中没有抽象类的概念.但是,如果它需要实施,那该怎么办呢?我试过像......

class A
  def self.new
    raise 'Doh! You are trying to write Java in Ruby!'
  end
end

class B < A
  ...
  ...
end
Run Code Online (Sandbox Code Playgroud)

但是当我尝试实例化B时,它会在内部调用A.new哪个会引发异常.

此外,模块无法实例化,但也无法继承.使新方法私有也行不通.有什么指针吗?

ruby abstract-class

113
推荐指数
9
解决办法
9万
查看次数

Rails 3 ActiveRecord抽象对象

我正在尝试实例化一个抽象AR类的对象用于测试目的.模型的定义如下:

class Basic < ActiveRecord::Base
  self.abstract_class = true

  def stuff
    raise NotImplementedError
  end
end
Run Code Online (Sandbox Code Playgroud)

当我尝试时Basic.new,我得到:

"Mysql2::Error: Table 'project_development.basics' doesn't exist"
Run Code Online (Sandbox Code Playgroud)

这是正常的行为吗?即使没有(显然不可能)持久性,抽象AR类也不打算实例化?

使用1.9.2-p136和Rails 3.0.4/Mysql2 0.2.6

编辑:

事实证明,错误是由列定义引起的,在抽象模型的情况下无法从数据库中获取.

class Basic < ActiveRecord::Base
  self.abstract_class = true
  @columns = []
end
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.

ruby activerecord ruby-on-rails

17
推荐指数
1
解决办法
1万
查看次数