2010-08-12 57 views
0

我试图把一个关联利用Mongo的文档子键索引。例如,我有两个集合,帖子和主题。帖子有一个标签密钥,这是一个索引的标签集合,用于后期漂亮的香草。我想要做虽然是在我的主题模型是这样的:如何设置具有复杂条件的MongoMapper关联?

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选项(完整的每个实例值插值到查询的能力),我一直没能找到在MM协会选项呢。有这样的事吗?

回答

3

在深入了解MM内部之后,我决定这不会发生。具体来说,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 

这将返回一个查询代理,因此对于所有意图和目的,我可以将它视为只读的关联关系。工作得不错。