我有一个非常奇怪的错误,我从未遇到过,无法找到答案。我有一个类定义,如下所示:
# 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
我真的很难过这个。
答案 0 :(得分:0)
我复制了你的文件结构并获得了不同的结果,这很有趣。
pry(main)> Other::CacheKey.cache_key_template
TypeError: Other is not a class
pry(main)> Other::CacheKey
TypeError: Other is not a class
pry(main)> Other.class
=> Module
pry(main)> Base
=> Base
pry(main)> Base.class
=> Module
看起来Rails将名称空间初始化为模块。您是否将Base
和Other
定义为其他类?
编辑:
我在base.rb
中定义了other.rb
和/models
及其各自的空类。在任一序列中对两个类调用cache_key_template
现在按预期工作。
您对base.rb
和other.rb
的实施情况如何?