在我正在使用的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
。
测试环境显示A
是B.ancestors
(letter
)的祖先(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自动加载问题,但我不确定如果父类包含在两个环境中的祖先中,为什么这些方法会失败。发生了什么事?
答案 0 :(得分:0)
同意,这看起来像是一个自动加载问题。虽然不理想,但您可以通过在<span>{{ now() }}</span>
now() {
const now: any = new Date();
return (now - this.start)
}
中添加require_dependency
来解决此问题。
至于查找根问题的位置,您可能在测试环境中存在一些在测试环境中不存在的库依赖项。我会在Test上加载REPL并检查B
。一些有用的方法:
A
等