2012-01-10 6 views
2

のぞき、この単純化された認証システム:クラスメソッド埋め込まれた文書

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の "モデル"を定義するファイルにすべての認証固有のものを保持したいからです。

問題がありますか?これは、埋め込まれた文書のクラスのメソッドを呼び出すことはできません。

> 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 

ので、埋め込まれた文書モデルにおけるクラスメソッドではなく、良いアイデア?

答えて

1

最初に試したように埋め込みドキュメントに直接アクセスすることはできませんAuth.loggin('user','pass')。あなたはこの

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

のように埋め込まれた文書モデルで唯一のインスタンスメソッドを持つべきであると、この

@user.auth.login('user','pass') 
のようなユーザーオブジェクトでアクセスすることができます
関連する問題