5
のインスタンスとして登録していない、私は次のようなコードを持っている:レール:サブクラスは私が働いているの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"を返します。しかし、私はテスト環境でnil
を取得します。
テスト環境は、A
はletter
(B.new
)の先祖(B.ancestors
)の間であるが、ケースの等価演算子またはis_a?(A)
とサブクラスとして登録に失敗したことを示しています。
A === B.new #=> false in test environment, true locally
B.new.is_a?(A) #=> false in test environment, true locally
これはRailsの自動ロードの問題のように思えるが、私は親クラスが両方の環境での先祖に含まれている場合、これらのメソッドは失敗するだろう、なぜわかりません。どうしたの?
は再現できませんでした。 – Ilya
@Ilya私はそれがアプリケーションの他の多くのクラスによって引き起こされるオートローディングの問題だと確信しています。ここで再現するには大きすぎ、リポジトリにリンクするにはプライベートすぎる。 – steel
これは 'spring'の問題である可能性が高いです。あなたは '春'を使っていますか?もしそうなら、最初に 'spring'を殺してからもう一度あなたのテストを試みてください。あなたが言ったように、 'case/when'は' is_a? '呼び出しを使用し、' B.new.is_a(A) 'は' true'を返します – etagwerker