合并范围可以说我有这3个范围:轨道4 - 在干燥方式
scope :assembly_reclamation, -> { where(status: 5) }
scope :customer_reclamation, -> { where(status: 9) }
scope :wrong_delivery, -> { where(status: 12) }
现在,让我们说,我要作出这样的连接这3个类别的一个范围。我现在这样做:
scope :returnable, -> { where(status: [5, 9, 12]) }
虽然这个工程,它有一些缺点。如果我要改变三个类别中的一个的条件,我将不得不重新修改包含它们的范围。
像这样的事情似乎更干:
scope :returnable, -> { assembly_reclamation.or.customer_reclamation.or.wrong_delivery }
但是,这不是有效的代码。
有没有办法以这种方式编码?
UPDATE
我知道我已经使用使用类别和ID的例子,但请不要让这件事。它涉及合并范围。
更新2 我已经改变从id
到status
属性的名称,因为大家都专注于id
的问题,而不是问题
http://stackoverflow.com/questions/6686920/activerecord-query-union可以帮助你 – Ilya
硬编码数据库生成的ID进入你的应用程序代码是一个坏主意。主要是因为它不适合测试,因为它要求将所有记录以相同顺序插入到数据库中。 – max
还记得范围只是类方法。如果你正在写的东西不适合一个lambda块,它应该被重构成一个普通的类方法。 – max