SQL / RoR ActiveRecord Aggregation Querying Through has_many Relationship











up vote
0
down vote

favorite












Consider the following:




  1. Family has_many kids (Family 1:many Kid)

  2. Kid has an enum attribute age_group which can be baby, child, teenager, or adult


I would like to create several scopes:




  1. 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.


  2. 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.










share|improve this question


























    up vote
    0
    down vote

    favorite












    Consider the following:




    1. Family has_many kids (Family 1:many Kid)

    2. Kid has an enum attribute age_group which can be baby, child, teenager, or adult


    I would like to create several scopes:




    1. 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.


    2. 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.










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      Consider the following:




      1. Family has_many kids (Family 1:many Kid)

      2. Kid has an enum attribute age_group which can be baby, child, teenager, or adult


      I would like to create several scopes:




      1. 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.


      2. 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.










      share|improve this question













      Consider the following:




      1. Family has_many kids (Family 1:many Kid)

      2. Kid has an enum attribute age_group which can be baby, child, teenager, or adult


      I would like to create several scopes:




      1. 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.


      2. 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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 7 at 17:00









      PressingOnAlways

      5,53742041




      5,53742041
























          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.






          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














             

            draft saved


            draft discarded


















            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

























            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.






            share|improve this answer

























              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.






              share|improve this answer























                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.






                share|improve this answer












                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.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 7 at 22:20









                PressingOnAlways

                5,53742041




                5,53742041






























                     

                    draft saved


                    draft discarded



















































                     


                    draft saved


                    draft discarded














                    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





















































                    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







                    這個網誌中的熱門文章

                    Xamarin.form Move up view when keyboard appear

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Anylogic : not able to use stopDelay()