2010-08-12 60 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 

這將返回一個查詢代理,因此對於所有意圖和目的,我可以將它視爲只讀的關聯關係。工作得不錯。