呼叫呼叫结果的呼叫

时间:2011-02-12 13:28:50

标签: ruby-on-rails ruby lambda

使用框架我需要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) } }

显然不能胜任这项工作。

1 个答案:

答案 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等库。