2010-08-12 6 views
0

Donc Candy est une bibliothèque très simple pour interagir avec Mongo dans Ruby.Ruby, Candy et stuff mongo comme SQL

Mon pauvre cerveau SQL est un moment difficile de déterminer comment je tracer ce problème:

Il y a user s, il y a thing s. Chaque thing a été faite par un user, mais devrait être accessible à un sous-ensemble de user s (spécifié dans le thing). Laissant la spécification de user à l'écart pour le moment, comment pourrais-je obtenir une liste de tous thing s que userX a accès?

class Thing 
    include Candy::Piece 
end 

class Things 
    include Candy::Collection 
    collects :thing 
end 

Dois-je attribuer les permis user s à un thing comme ça? (Permet d'utiliser simplement des chaînes de référence user s pour l'instant)

t = Thing.new 
t.allowed = ['X','Y','Z'] 

Cela semble à peu près juste pour moi, ce qui me ferait envie de faire:

Things.find(allowed:'X') 

mais cela ne fonctionne pas tout à fait ...

NoMethodError: undefined method ‘call’ for {:allowed=>"X"}:Hash 

des idées?

Répondre

1

Je suis vraiment désolé j'ai pris si longtemps pour attraper ceci et répondre. Cela peut être trop tard pour vos besoins, mais:

Candy n'implémente pas la méthode find. C'est exprès: si un objet représente une collection, chaque accès est implicitement trouver quelque chose dans cette collection. C'est la même raison pour laquelle il n'y a pas de méthode save. Si le mappage est vraiment transparent, les verbes qui signifient "Faites ceci dans la base de données" ne devraient pas être nécessaires.

Donc, pour faire ce que vous voulez, vous pouvez soit faire un nouveau simplement choses objet avec le champ passé sur la création:

x_is_allowed = Things.new(allowed: 'X') 

... ou vous pouvez sauter une étape et de le faire par la méthode de la classe:

x_is_allowed = Things.allowed('X') 

... ou vous pourriez commencer avec toute la collection et de limiter par attribut plus tard:

things = Things.new 
x_is_allowed = things.allowed('X') 

Alors ... Um. Tout cela fonctionnera. Mais. Je dois vous avertir que je ne suis vraiment pas satisfait de la facilité d'utilisation générale de Candy en ce moment, et des collections et des champs de tableau en particulier. Le plus gros problème est celui des accesseurs: la méthode [] ne fonctionne pas comme vous l'attendez, donc vous finissez par devoir appeler to_a et refresh et d'autres choses qui vous semblent collantes et désagréables.

Ceci doit être corrigé, et je le ferai dès que j'aurai terminé la réécriture du pilote (un projet connexe appelé Crunch). À court terme, Candy est probablement mieux considérée comme une expérience pour les aventuriers, et je ne peux pas garantir que cela gagnera du temps jusqu'à ce que l'interface soit un peu mieux verrouillée. Je suis désolé à ce sujet.

+0

Aucun problème du tout! J'ai été en vacances donc ça ne m'a pas du tout semblé du tout: P Ça a l'air fantastique - j'étudie en utilisant Candy pour un projet assez personnel, je sais que c'est une mauvaise idée de considérer Candy avec ton avertissement sur l'impermanence de son API mais c'est tellement bon! Je vais certainement l'utiliser pour la phase de test, car l'interaction DB est minime et Candy est plus simple dans toutes les lignes! Faites-moi savoir si je peux aider à son développement. Merci bonbons, thandy. –