使用一个框架,我需要2个ActiveRecord作用域:
scope :tagged_with, lambda { |tag| {:conditions => [" tags like ? ", "% #{tag} %"] } }
scope :tagged_with_any, lambda { |tag_array | [HERE NEW IMPLEMENTATION] }我希望第二个作用域基于第一个作用域。如果你要硬编码,你会做一个两个元素的数组:
lambda { | tag_array | tagged_with(tag_array[0]).tagged_with(tag_array[1]) }这是可行的,但是我如何做泛型呢?
lambda { | tag_array | tags.each { |t| tagged_with(t) } }显然做不到这项工作。
发布于 2011-02-12 21:38:58
这可以接受吗?
named_scope :tagged_with_all, lambda { |tag_array| tag_array.inject(self, :tagged_with) }edit重命名为tagged_with_all,因为它确实是这样做的。对于tagged_with_any,Vanilla命名作用域不实现OR连接;从作用域“手动”连接ORs条件是可行的,但有点麻烦。请注意,您有像Arel或Metawhere这样的库。
https://stackoverflow.com/questions/4978291
复制相似问题