5
的情況下在一個Rails應用程序,我的工作,我有這樣的代碼如下: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
是祖先的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'嗎?如果是這樣,請先嚐試殺死'spring',然後再次嘗試你的測試。正如你所說,'case/when'應該使用'is_a?'調用,'B.new.is_a(A)'將返回'true' – etagwerker