在我的应用程序中,我有以下模型:
class Category < ActiveRecord::Base
#attr: :title
end
class User < ActiveRecord::Base
end
class User::Category < ActiveRecord::Base
#attr: :description
end
现在我有了这个文件夹结构,一切看起来都整齐了,但有趣的是:当我运行类似的东西时:
User::Category.last.description
Rails 有时认为我指的是 Category 而不是 User::Category,这会破坏应用程序,因为描述不是一个属性。知道吗?这是我第二次看到这个问题,不知道如何解决?有时它适用于正确的模型,有时它获得没有命名空间的模型模型!
猜测User::Category.last
正在返回类Category
的对象,正如你所注意到的。
如果你想让last
返回一个不同的对象,这将是一个修改last
的问题,猴子补丁可以在用户::类别:
class User::Category < ActiveRecord::Base
def last
self
end
end
我会选择性传播感染。
可以将type
属性添加到类型 string
的Category
然后
class UserCategory < Category
attr_reader :description
end
或者,如果您已经在类别对象上拥有由AR支持的描述属性,则可以使用猴子补丁方法
http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html