Ruby, Candy и SQL-подобные монго - PullRequest
       6

Ruby, Candy и SQL-подобные монго

0 голосов
/ 12 августа 2010

Итак Candy - это действительно простая библиотека для взаимодействия с Mongo в Ruby.

Моему плохому мозгу с SQL трудно понять, как мне следует наметить эту проблему:

Есть user с, есть thing с.Каждый thing был сделан одним user, но должен быть доступен для подмножества всех user s (указанных в thing).Оставляя пока в стороне спецификацию user, как мне получить список всех thing s, к которым user X имеет доступ?

class Thing
  include Candy::Piece
end

class Things
  include Candy::Collection
  collects :thing
end

Должен ли я присвоить разрешенные user с thing, как это?(давайте пока просто будем использовать строки для ссылки user s)

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

Мне кажется, это правильно, и я хотел бы сделать следующее:

Things.find(allowed:'X')

, но это не таквполне работает…

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

есть идеи?

1 Ответ

1 голос
/ 25 августа 2010

Мне очень жаль, что я потратил так много времени, чтобы поймать это и ответить.Это может быть слишком поздно для ваших целей, но:

Candy не реализует метод find.Это сделано специально: если объект представляет коллекцию, каждый доступ неявно находит что-то в этой коллекции.По той же причине нет метода save.Если отображение действительно прозрачно, глаголы, которые означают «Делать это в базе данных», не должны быть необходимыми.

Поэтому, чтобы сделать то, что вы хотите, вы можете просто создать новый объект Things с переданной областью действия.creation:

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

... или вы можете сохранить шаг и сделать это методом класса:

x_is_allowed = Things.allowed('X')

... или вы можете начать со всей коллекции и ограничить еепо атрибуту позже:

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

Итак ... Гм.Все это будет работать. Но. Я должен предупредить вас, что я действительно не в восторге от общего удобства использования Candy прямо сейчас, и в частности с коллекциями и полями массивов.Самая большая проблема - средства доступа: метод [] работает не так, как вы ожидаете, поэтому вам в конечном итоге придется вызывать to_a и refresh и другие вещи, которые кажутся липкими и неприятными.

Это нужно исправить, и я сделаю это, как только закончу переписывать драйвер (связанный проект Crunch ).В краткосрочной перспективе, Кенди, вероятно, лучше всего рассматривать как эксперимент для любителей приключений, и я не могу гарантировать, что это сэкономит время, пока интерфейс не будет заблокирован немного лучше.Я сожалею об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...