如何设置具有复杂条件的MongoMapper关联?

时间:2010-08-12 01:32:01

标签: ruby-on-rails mongomapper

我正在尝试整合一个利用Mongo文档子键索引的关联。例如,我有两个集合,帖子和主题。帖子有一个标签键,这是一个用于后期漂亮香草的索引标签集。我想做的是,在我的Topic模型中有一些东西,如:

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关联选项中找到它。这样的事情存在吗?

1 个答案:

答案 0 :(得分: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

返回一个查询代理,因此对于所有意图和目的,我可以将其视为一个只读目的的关联。效果很好。