请考虑以下内容:
我想创建几个范围:
选择所有只有age_group: baby
个孩子的家庭。这意味着如果一个家庭有一个婴儿和一个孩子,那么这个家庭就不符合这个范围。
选择所有有婴儿和儿童,但没有少年或成人的家庭。
其他范围仅适用于age_group儿童,青少年,成人等,但我相信我可以根据与第一个范围相同的逻辑来创建该范围。
答案 0 :(得分:0)
我最终想到了这样的东西...
Family.find_by_sql("SELECT * FROM kids WHERE NOT EXISTS ( SELECT NULL FROM kids WHERE kids.family_id = family.id AND family.age_group != 'baby')")
在我有限的测试数据中,这似乎使所有只有婴儿的家庭。我没有对此进行广泛的测试,因为它不可扩展。由于必须使用find_by_sql
,因此无法将其与其他activerecord链接在一起,在其中调用或添加分页。
我决定走另一条路,在家庭中添加一个family_stage
列,并且随时将孩子更新或添加到家庭中以更新family_stage
。它使查询一切变得更加简单,并将处理置于更新方面。