Mongoid版本作用域

Mongoid内置了当你混合,在Mongoid ::版本控制模块版本。 它的工作原理对我很好,但我用粗暴的模型版本的工作。 让我给你举个例子。 假设我建立一个博客的应用程序(我不是)。

我的模型是后。 比方说,我想找到一个职位的所有以前发布的版本。 以下工作:

post = Post.first # just grab something published_posts = post.versions.find_all{ |v| v.published == true }

等等。然后我可以做published_posts或任何东西。 我很想做这个,所以我不会把find_all块在我看来,一个名为范围,但我无法弄清楚如何重写版本类的内置功能。

我已经试过各种范围在我的后级。 例如:

# I can't get this and other variations on this to work scope :versions_published, :where => 'self.versions.find_all{ |v| v.published == true }'

我也尝试猴子修补版本类,但它并没有非常喜欢它。 我有一个解决办法,我只是希望更多地了解内置版本Mongoid提供,尤其是如何扩展版本类。

--------------解决方案-------------

你定义的范围是非常,非常错误的两个根本原因:

  1. 你不能传递一个字符串:where的参数。 你需要一个散列通
  2. 范围是在类(定义Post在这种情况下),所以你不能引用self.versions因为self是指Post类,而不是任何特定岗位

解决的办法是用matches在Mongoid助手(它是一个快捷方式到蒙戈的$ elemMatch):

class Post
#...
scope :versions_published, where(:versions.matches => {:published => true})
#...
end

我不会推荐的monkeypatching版本类,除非你真的知道自己在做什么。

分类:Ruby on Rails的 时间:2015-03-15 人气:2
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.676 (s). 10 q(s)