我有

class Foo < ActiveRecord::Base
  named_scope :a, lambda { |a| :conditions => { :a => a } }
  named_scope :b, lambda { |b| :conditions => { :b => b } }
end

我想要
class Foo < ActiveRecord::Base
  named_scope :ab, lambda { |a,b| :conditions => { :a => a, :b => b } }
end

但我更愿意以干燥的方式进行。我可以通过使用获得相同的效果
 Foo.a(something).b(something_else)

但它不是特别可爱。

最佳答案

好吧,我还是 Rails 的新手,我不确定您在这里要做什么,但是如果您只是要重用代码,为什么不使用常规类方法呢?


        def self.ab(a, b)
            a(a).b(b)
        end
    

您可以通过使用 *args 而不是 a 和 b 来使其更加灵活,然后可能使其中一个成为可选。如果您被卡在named_scope上,您难道不能将其扩展为做相同的事情吗?

如果我对您想要做的事情完全不了解,请告诉我。

关于ruby-on-rails - 有没有办法将命名范围组合成一个新的命名范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29011/

10-12 02:16