未正确调用命名空间模型



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

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属性添加到类型 stringCategory

然后

class UserCategory < Category
  attr_reader :description
end

或者,如果您已经在类别对象上拥有由AR支持的描述属性,则可以使用猴子补丁方法

http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html

最新更新