Mongoid嵌入式文档的类方法

3
我希望把所有认证相关的代码放在定义 Auth “模型”的文件中,就像这样:
class User
  include Mongoid::Document
  embeds_one :auth
  field :username, type: String
end

class Auth
  include Mongoid::Document
  embedded_in :user, inverse_of: :auth
  field :password

  def self.login(user, pass)
    User.first(conditions: { username: user, password: pass })
  end
end

问题在于:无法调用嵌入文档的类方法:

> Auth.login('user', 'pass')
Mongoid::Errors::InvalidCollection: Access to the collection for Auth is not allowed since it is an embedded document, please access a collection from the root document.

> User.auth.login('user', 'pass')
NoMethodError: undefined method `auth' for User:Class

在嵌入式 Mongoid::Document 模型中使用单例方法可能并不是一个好主意?
1个回答

1

您不能像第一次尝试那样直接访问嵌入式文档Auth.loggin('user','pass')。在嵌入式文档模型中,您应该只有实例方法,如下所示。

def self.login(user, pass)
   User.first(conditions: { username: user, password: pass })
end

可以通过用户对象像这样访问它

@user.auth.login('user','pass')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接