命名空间模型未正确调用

时间:2016-02-11 16:06:29

标签: ruby-on-rails activemodel

在我的应用程序中,我有以下型号:

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 ,它打破了应用程序,因为描述不是属性。任何的想法?这是我第二次看到这个问题而不知道如何修复它?有时它适用于正确的模型,有时它会获得没有命名空间的模型模型!

1 个答案:

答案 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