使用框架我需要2个ActiveRecord范围:
scope :tagged_with, lambda { |tag| {:conditions => [" tags like ? ", "% #{tag} %"] } }
scope :tagged_with_any, lambda { |tag_array | [HERE NEW IMPLEMENTATION] }
我希望第二个范围基于第一个范围。如果你要硬编码,你会做一个2元素数组:
lambda { | tag_array | tagged_with(tag_array[0]).tagged_with(tag_array[1]) }
哪个有效,但我怎么做通用
lambda { | tag_array | tags.each { |t| tagged_with(t) } }
显然不能胜任这项工作。
答案 0 :(得分:1)
这可以接受吗?
named_scope :tagged_with_all, lambda { |tag_array| tag_array.inject(self, :tagged_with) }
[edit]重命名为tagged_with_all
,因为它确实是这样做的。对于tagged_with_any
,Vanilla命名范围不实现OR连接;从范围“手动”连接OR条件是可行的,但有点混乱。请注意,您有Arel或Metawhere等库。