Rails:子类未注册为父类的实例

时间:2017-01-26 23:34:19

标签: ruby-on-rails ruby

在我正在使用的Rails应用程序中,我有以下代码:

# app/models/a.rb
class A < ActiveRecord::Base; ...; end
# app/models/b.rb
class B < A; ...; end

# /app/elsewhere...

do_case(B.new)

def do_case(letter)
  case letter
  when A
    "not nil"
  end
end

当我在本地运行它时,它按预期执行,我得到“非零”作为返回值。但我在我的测试环境中得到nil

测试环境显示AB.ancestorsletter)的祖先(B.new)之一,但未能通过大小写等式运算符注册为子类或is_a?(A)

A === B.new #=> false in test environment, true locally
B.new.is_a?(A)  #=> false in test environment, true locally

这似乎是一个Rails自动加载问题,但我不确定如果父类包含在两个环境中的祖先中,为什么这些方法会失败。发生了什么事?

1 个答案:

答案 0 :(得分:0)

同意,这看起来像是一个自动加载问题。虽然不理想,但您可以通过在<span>{{ now() }}</span> now() { const now: any = new Date(); return (now - this.start) } 中添加require_dependency来解决此问题。

至于查找根问题的位置,您可能在测试环境中存在一些在测试环境中不存在的库依赖项。我会在Test上加载REPL并检查B。一些有用的方法:

A