2

我有一个 class Post,范围如下:

scope :by_tag, ->(tag){ where(:desc => /##{Regexp.escape(tag)}/) }

它适用于一个标签,但我不能让它适用于各种标签。

例如:我不能让它给我带有#rails 和#regexp 标记的帖子。

使用标准联合,我可以让它返回带有#rails 或#regexp 标记的帖子。

我怎样才能让它工作?我正在使用 mongoid,顺便说一句。

提前致谢。


只是发现这不是 OR。发生的情况是,我第二次调用 by_tag 时,它会覆盖前一次。我相信那是因为它是同一个属性。

有人知道如何解决这个问题吗?谢谢

4

1 回答 1

1

正则表达式查询往往非常慢。相反,存储一个标签数组并用于$in查询该数组。

使用 Mongoid 2.x 使用all_in

scope :by_tags, ->(*tags) { all_in(tags: *tags) }

使用 Mongoid 3 使用all合并策略

scope :by_tags, ->(*tags) { all(tags: *tags) }
于 2012-10-17T11:35:14.510 回答