SQL / RoR ActiveRecord Aggregation Querying Through has_many Relationship
up vote
0
down vote
favorite
Consider the following:
- Family has_many kids (Family 1:many Kid)
- Kid has an enum attribute age_group which can be baby, child, teenager, or adult
I would like to create several scopes:
Select all the families that have kids that are ONLY
age_group: baby
. What this mean is that if a family has a baby and a child, that family should not qualify for this scope.Select all families that have a baby and child, but no teenager or adult.
The other scopes are age_group ONLY child, teenager, adult, etc. but I believe I can create that off the same logic as the 1st scope.
mysql sql join activerecord
add a comment |
up vote
0
down vote
favorite
Consider the following:
- Family has_many kids (Family 1:many Kid)
- Kid has an enum attribute age_group which can be baby, child, teenager, or adult
I would like to create several scopes:
Select all the families that have kids that are ONLY
age_group: baby
. What this mean is that if a family has a baby and a child, that family should not qualify for this scope.Select all families that have a baby and child, but no teenager or adult.
The other scopes are age_group ONLY child, teenager, adult, etc. but I believe I can create that off the same logic as the 1st scope.
mysql sql join activerecord
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Consider the following:
- Family has_many kids (Family 1:many Kid)
- Kid has an enum attribute age_group which can be baby, child, teenager, or adult
I would like to create several scopes:
Select all the families that have kids that are ONLY
age_group: baby
. What this mean is that if a family has a baby and a child, that family should not qualify for this scope.Select all families that have a baby and child, but no teenager or adult.
The other scopes are age_group ONLY child, teenager, adult, etc. but I believe I can create that off the same logic as the 1st scope.
mysql sql join activerecord
Consider the following:
- Family has_many kids (Family 1:many Kid)
- Kid has an enum attribute age_group which can be baby, child, teenager, or adult
I would like to create several scopes:
Select all the families that have kids that are ONLY
age_group: baby
. What this mean is that if a family has a baby and a child, that family should not qualify for this scope.Select all families that have a baby and child, but no teenager or adult.
The other scopes are age_group ONLY child, teenager, adult, etc. but I believe I can create that off the same logic as the 1st scope.
mysql sql join activerecord
mysql sql join activerecord
asked Nov 7 at 17:00
PressingOnAlways
5,53742041
5,53742041
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
I ended up coming up with something like this...
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')")
This seemed to get all the families with only babies in my limited test data. I didn't extensively test this however because it wasn't extendable. Since I had to use find_by_sql
, I could not chain this with other activerecord where calls or add pagination to this.
I decided to take the other route and make a family_stage
column in family and anytime kids are updated or added to family to update family_stage
. It makes querying everything much more straightforward and puts the processing on the side of updates.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
I ended up coming up with something like this...
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')")
This seemed to get all the families with only babies in my limited test data. I didn't extensively test this however because it wasn't extendable. Since I had to use find_by_sql
, I could not chain this with other activerecord where calls or add pagination to this.
I decided to take the other route and make a family_stage
column in family and anytime kids are updated or added to family to update family_stage
. It makes querying everything much more straightforward and puts the processing on the side of updates.
add a comment |
up vote
0
down vote
I ended up coming up with something like this...
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')")
This seemed to get all the families with only babies in my limited test data. I didn't extensively test this however because it wasn't extendable. Since I had to use find_by_sql
, I could not chain this with other activerecord where calls or add pagination to this.
I decided to take the other route and make a family_stage
column in family and anytime kids are updated or added to family to update family_stage
. It makes querying everything much more straightforward and puts the processing on the side of updates.
add a comment |
up vote
0
down vote
up vote
0
down vote
I ended up coming up with something like this...
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')")
This seemed to get all the families with only babies in my limited test data. I didn't extensively test this however because it wasn't extendable. Since I had to use find_by_sql
, I could not chain this with other activerecord where calls or add pagination to this.
I decided to take the other route and make a family_stage
column in family and anytime kids are updated or added to family to update family_stage
. It makes querying everything much more straightforward and puts the processing on the side of updates.
I ended up coming up with something like this...
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')")
This seemed to get all the families with only babies in my limited test data. I didn't extensively test this however because it wasn't extendable. Since I had to use find_by_sql
, I could not chain this with other activerecord where calls or add pagination to this.
I decided to take the other route and make a family_stage
column in family and anytime kids are updated or added to family to update family_stage
. It makes querying everything much more straightforward and puts the processing on the side of updates.
answered Nov 7 at 22:20
PressingOnAlways
5,53742041
5,53742041
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53194268%2fsql-ror-activerecord-aggregation-querying-through-has-many-relationship%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown