我有一个班级Post
,其范围如下:
scope :by_tag, ->(tag){ where(:desc => /##{Regexp.escape(tag)}/) }
它适用于一个标签,但我无法使用各种标签。
例如:我不能让它给我标记为#rails AND #regexp的帖子。
使用条件联合我可以将它标记为#rails OR #regexp标记的帖子。
我怎样才能让它发挥作用?我正在使用mongoid,顺便说一句。
提前致谢。
只是不是OR的fount。发生的事情是我第二次调用by_tag,它会覆盖前一个。我相信那是因为它是同一个属性。
有人知道如何解决这个问题吗?感谢
答案 0 :(得分:1)
Regexp查询往往很慢。相反,存储一组标记并使用$in
来查询数组。
使用Mongoid 2.x使用all_in
scope :by_tags, ->(*tags) { all_in(tags: *tags) }
使用Mongoid 3使用all
merge strategy
scope :by_tags, ->(*tags) { all(tags: *tags) }