合併範圍可以說我有這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