当前位置:  开发笔记 > 编程语言 > 正文

有没有办法将命名范围合并到一个新的命名范围?

如何解决《有没有办法将命名范围合并到一个新的命名范围?》经验,为你挑选了1个好方法。

我有

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)

但它并不是特别可爱.



1> Meta Lambda..:

至少从3.2开始就有一个聪明的解决方案:

scope :optional, ->() {where(option: true)}
scope :accepted, ->() {where(accepted: true)}
scope :optional_and_accepted, ->() { self.optional.merge(self.accepted) }

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有