0
我正在使用這個寶石https://github.com/stefankroes/ancestry爲我的人員模型。該表是這樣的:如何獲取數組中所有對象的後代? (Rails +血統寶石)
+----+----------+
| id | ancestry |
+----+----------+
| 1 | NULL |
| 2 | 1 |
| 3 | 1 |
| 4 | 1/2 |
| 5 | 1/3 |
| 6 | NULL |
| 7 | 1/2 |
| 8 | 1/2 |
| 9 | 1/3 |
| 10 | NULL |
| 11 | 10 |
| 12 | 10 |
| 13 | NULL |
| 14 | NULL |
| 15 | 6 |
| 16 | 6 |
| 17 | 6/16 |
| 18 | 6 |
| 19 | 6/18 |
| 20 | 14 |
+----+----------+
我想查詢的是:
給出了兩個人ID爲1和6
讓這兩種人的後代
在一個查詢中,而不是逐個查詢,因爲我需要將它放到Arel.or方法中。
我知道使用:
People.select("id").where(People.arel_table[:ancestry].matches("6/%"))
產生像SQL語句並返回人民的所有孫子ID爲6.我也知道:
People.select("id").where(People.arel_table[:ancestry].matches(["1/%","6/%"]))
不會因爲工作它會生成無效的LIKE語句:
SELECT id FROM `people` WHERE (`people`.`ancestry` LIKE '1/%', '6/%')
在另一方面,我知道:
People.select("id").where(People.arel_table[:ancestry].in(["1", "6"]))
生成SQL語句並返回所有的孩子都1的(但不是孫子)和6我也知道:
People.select("id").where(People.arel_table[:ancestry].in(["1/%", "6/%"]))
回報什麼,因爲聲明作爲精確匹配。
我的問題是:我怎麼能把他們全部變成一個(可能是鏈接)查詢來獲得1和6的所有後代?在這個例子中,我預計結果是:[2,3,4,5,7,9,15,16,17,18,19]。
非常感謝你的建議