在我的应用程序中,我有以下型号:
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 SOMETIMES认为我指的是类别而不是 User :: Category ,它打破了应用程序,因为描述不是属性。任何的想法?这是我第二次看到这个问题而不知道如何修复它?有时它适用于正确的模型,有时它会获得没有命名空间的模型模型!
答案 0 :(得分:0)
猜测User::Category.last
正在返回类Category
的对象,正如您所注意到的那样。
如果你想让last
返回一个不同的对象,那么修改last
会有问题,可以在用户::类别中修补补丁:
class User::Category < ActiveRecord::Base
def last
self
end
end
我会选择STI。
可以将type
属性添加到Category
string
然后
class UserCategory < Category
attr_reader :description
end
或者如果你已经在类别对象上有AR支持的描述attr,可以使用猴子补丁方法
http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html