Как настроить ассоциации MongoMapper со сложными условиями? - PullRequest
0 голосов
/ 12 августа 2010

Я пытаюсь собрать ассоциацию, которая использует преимущества индексации подразделов документов Mongo.Например, у меня есть две коллекции, сообщения и темы.Сообщения имеют ключ тегов, который представляет собой индексированный набор тегов для сообщения - довольно ванильный.Хотя я хочу сделать что-то в моей модели Темы, например:

class Topic
  key :name, String
  many :posts, :query_conditions => {:tag => lambda {|i| i.name} }
end

Идея состоит в том, что у меня есть Тема с именем "mongomapper", когда я вызываю @ topic.posts, яхочу, чтобы ассоциация выполняла эквивалент:

post.find({tag: "mongomapper"})

Мне фактически нужно что-то вроде опции AR finder_sql (в комплекте с возможностью интерполировать значения для каждого экземпляра в запрос), что я не смогнайти в опциях ассоциации ММ еще.Существует ли что-нибудь подобное?

1 Ответ

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

Перекопав внутренности ММ, я решил, что этого просто не произойдет.В частности, ассоциации has_many всегда ограничены добавлением: foreign_key => proxy_owner._id к запросу;нет способа избежать добавления этого критерия, а это означает, что вы не можете устанавливать ассоциации с пользовательскими искателями.

Я просто использовал именованную область в моей модели Post и вспомогательный метод в модели Topic.

class Post
  scope :tagged, lambda {|tag| where(:tags => tag)}
end

class Topic
  def posts
    Post.tagged(name.downcase)
  end
end

Это возвращает прокси-запрос, поэтому для всех намерений и целей я могу рассматривать его как ассоциацию для целей только для чтения.Работает достаточно хорошо.

...