Как настроить ассоциации Mongomapper со сложными условиями?
-
27-09-2019 - |
Вопрос
Я пытаюсь собрать ассоциацию, которая воспользуется индексацией документов Mongo. Например, у меня есть две коллекции, посты и темы. Посты имеют ключ тегов, который является индексированным набором тегов для поста - довольно ваниль. Хотя я хочу сделать, есть что-то в моей модели темы, как:
class Topic
key :name, String
many :posts, :query_conditions => {:tag => lambda {|i| i.name} }
end
Идея в том, что у меня есть тема с именем «Монпомаппер», когда я вызываю @ topic.posts, я хочу, чтобы ассоциация выполняла эквивалент:
post.find({tag: "mongomapper"})
Я эффективно понадобится что-то вроде параметра AR Finder_SQL (в комплекте с возможностью интерполировать значения для каждого экземпляра в запрос), которые я еще не смог найти в параметрах ассоциации MM. Что-то подобное существует?
Решение
После копания через мм внутренних органов я решил, что это просто не произойдет. В частности, ассоциации HAS_MANY всегда ограничены A: Entertain_Key => Proxy_owner._id дополнение к запросу; Там нет способа избежать добавления критериев, что означает, что вы не можете создать ассоциации с пользовательскими искателями.
Я только что использовал названный объем на мою модель и метод помощника на модели темы.
class Post
scope :tagged, lambda {|tag| where(:tags => tag)}
end
class Topic
def posts
Post.tagged(name.downcase)
end
end
Это возвращает прокси-сервер запроса, поэтому для всех намерений и целей я могу относиться к нему, как ассоциация для чтения. Работает достаточно хорошо.