2011-02-03 3 views
1

En supposant que j'ai vue dans mon CouchDB nommé « utilisateur/all » et un ExtendedDocument CouchRest comme suit:Comment récupérer un objet à partir d'une vue CouchDB en utilisant le CouchRest Ruby Gem

class User < CouchRest::ExtendedDocument 

    property :username 
    property :password 
    property :realname 
    property :role 
    property :rights 

end 

Comment puis-je aller sur récupérer un document pour la clé 'admin' de cette vue en utilisant ce ExtendedDocument?

(Si je dois apporter des modifications à la sous-classe ExtendedDocument, ce qui doit être changé?)

Un grand merci.

Répondre

1

Essayez ceci:

class User < CouchRest::ExtendedDocument 

    property :username 
    property :password 
    property :realname 
    property :role 
    property :rights 

    view_by :role 

end 

Ici, je suppose 'admin' est une propriété de rôle. Cela fera une vue dans votre document de conception par clé. Ensuite, pour obtenir tous les documents « admin », vous venez de faire ce qui suit:

@admins = User.by_role(:key => 'admin') 

Si, en fait, l'identifiant réel du document est « admin », tout ce que vous avez à faire est la suivante:

@admin = User.get('admin') 

Ou encore:

@admin = User.all(:key => 'admin') 

Je suggère également jeter un oeil à CouchRest modèle, qui est essentiellement une extension de plainte du modèle actif à CouchRest si vous utilisez cela avec Rails. Bonne chance!

+0

Merci. Il semble que mon problème était que j'approchais ceci en vue de concevoir un schéma de base de données dans le futon, puis y accédant en utilisant la classe de document étendu de CouchRest. C'est évidemment complètement à l'envers. Je l'ai maintenant travailler en suivant votre exemple (et en utilisant .create! Pour d'abord stocker un objet dans la base de données). – Leynos

+0

Vous pouvez le faire de cette façon si vous préférez. Vous n'avez qu'à appeler la vue sur la base de données CouchRest comme si ... doc = DB.view 'foo/by_role' ou quoi que ce soit. Ecrit du haut de ma tête. Je le fais juste dans le modèle là, comment je l'ai décrit. Vous pouvez également définir explicitement la carte et réduire les fonctions comme si ... view_by: role,: map => "Votre fonction de carte ici",: réduire => "Réduire ici" – James

Questions connexes