4
我有一個非常奇怪的錯誤,我從來沒有遇到過,無法找到任何地方的答案。我有一個類定義,看起來像這樣:Rails加載順序更改類定義
# app/models/base/cache_key.rb
class Base
class CacheKey
class_attribute :cache_key_template, :instance_writer => false
self.cache_key_template = "base:tracker-%s-%s"
end
end
# app/models/other/cache_key.rb
class Other
class CacheKey < ::Base::CacheKey
self.cache_key_template = "other:tracker-%s-%s"
end
end
然而,當我跳進一個控制檯會話,它做了一些時髦的煩躁
$ rails console
> Base::CacheKey.cache_key_template
=> "base:tracker-%s-%s"
> Other::CacheKey.cache_key_template
=> "base:tracker-%s-%s"
> Other::CacheKey
=> Base::CacheKey
嗯,怪異。反過來呢?
$ rails console
> Other::CacheKey.cache_key_template
=> "other:tracker-%s-%s"
> Base::CacheKey.cache_key_template
=> "base:tracker-%s-%s"
> Other::CacheKey
=> Other::CacheKey
我真的很難過這個。
這些類定義的路徑是什麼?這可能會對Rails的自動加載行爲產生影響。例如。他們在'app/models/base/cache_key.rb'和'app/models/other/cache_key.rb'還是別的?還有哪個版本的Rails? –
對於自動加載程序正確處理這些每個都應該在自己的文件中定義。在其他文件中定義'Other'會導致混淆,它應該在'other.rb'中。 – tadman
Rails的版本是4.0.5,它們是在等效的'app/models/base/cache_key.rb'和'app/models/other/cache_key.rb'中指定的。 –