has_one association through has_many with dynamic conditions - Rails










0















I have three tables:



class Keeper
has_many :assignments
end

class Assignment
belongs_to :keeper
belongs_to :assignment_group
end

class AssignmentsGroup
has_many :assignments
validate :uniqueness_of_keeper
end


Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper association to AssignmentsGroup given that all associated assignments will have the same keeper?










share|improve this question




























    0















    I have three tables:



    class Keeper
    has_many :assignments
    end

    class Assignment
    belongs_to :keeper
    belongs_to :assignment_group
    end

    class AssignmentsGroup
    has_many :assignments
    validate :uniqueness_of_keeper
    end


    Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper association to AssignmentsGroup given that all associated assignments will have the same keeper?










    share|improve this question


























      0












      0








      0








      I have three tables:



      class Keeper
      has_many :assignments
      end

      class Assignment
      belongs_to :keeper
      belongs_to :assignment_group
      end

      class AssignmentsGroup
      has_many :assignments
      validate :uniqueness_of_keeper
      end


      Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper association to AssignmentsGroup given that all associated assignments will have the same keeper?










      share|improve this question
















      I have three tables:



      class Keeper
      has_many :assignments
      end

      class Assignment
      belongs_to :keeper
      belongs_to :assignment_group
      end

      class AssignmentsGroup
      has_many :assignments
      validate :uniqueness_of_keeper
      end


      Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper association to AssignmentsGroup given that all associated assignments will have the same keeper?







      ruby-on-rails activerecord associations






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 16 '18 at 3:16







      dn1985

















      asked Nov 16 '18 at 1:16









      dn1985dn1985

      32




      32






















          1 Answer
          1






          active

          oldest

          votes


















          0














          Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup and Assignment should be, but try this:



          class Keeper
          has_many :assignments
          end

          class Assignment
          belongs_to :keeper
          belongs_to :assignment_group # will need to add a reference to the assignments table
          end

          class AssignmentsGroup
          has_many :assignments
          has_many :keepers, through: assignments
          validate :single_keeper

          private

          def single_keeper
          errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
          end
          end


          See https://guides.rubyonrails.org/active_record_validations.html#custom-methods






          share|improve this answer

























          • whoops, forgot to add the belongs_to. Yes, Assignment belongs_to :assignment_group. My question is how can I add has_one :keeper to AssignmentGroup

            – dn1985
            Nov 16 '18 at 3:18











          • @dn1985 you can't cause there are many keepers if AssignmentsGroup has_many :assignments. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper validation.

            – Simon L. Brazell
            Nov 16 '18 at 3:38











          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',
          autoActivateHeartbeat: false,
          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%2f53330104%2fhas-one-association-through-has-many-with-dynamic-conditions-rails%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









          0














          Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup and Assignment should be, but try this:



          class Keeper
          has_many :assignments
          end

          class Assignment
          belongs_to :keeper
          belongs_to :assignment_group # will need to add a reference to the assignments table
          end

          class AssignmentsGroup
          has_many :assignments
          has_many :keepers, through: assignments
          validate :single_keeper

          private

          def single_keeper
          errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
          end
          end


          See https://guides.rubyonrails.org/active_record_validations.html#custom-methods






          share|improve this answer

























          • whoops, forgot to add the belongs_to. Yes, Assignment belongs_to :assignment_group. My question is how can I add has_one :keeper to AssignmentGroup

            – dn1985
            Nov 16 '18 at 3:18











          • @dn1985 you can't cause there are many keepers if AssignmentsGroup has_many :assignments. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper validation.

            – Simon L. Brazell
            Nov 16 '18 at 3:38
















          0














          Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup and Assignment should be, but try this:



          class Keeper
          has_many :assignments
          end

          class Assignment
          belongs_to :keeper
          belongs_to :assignment_group # will need to add a reference to the assignments table
          end

          class AssignmentsGroup
          has_many :assignments
          has_many :keepers, through: assignments
          validate :single_keeper

          private

          def single_keeper
          errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
          end
          end


          See https://guides.rubyonrails.org/active_record_validations.html#custom-methods






          share|improve this answer

























          • whoops, forgot to add the belongs_to. Yes, Assignment belongs_to :assignment_group. My question is how can I add has_one :keeper to AssignmentGroup

            – dn1985
            Nov 16 '18 at 3:18











          • @dn1985 you can't cause there are many keepers if AssignmentsGroup has_many :assignments. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper validation.

            – Simon L. Brazell
            Nov 16 '18 at 3:38














          0












          0








          0







          Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup and Assignment should be, but try this:



          class Keeper
          has_many :assignments
          end

          class Assignment
          belongs_to :keeper
          belongs_to :assignment_group # will need to add a reference to the assignments table
          end

          class AssignmentsGroup
          has_many :assignments
          has_many :keepers, through: assignments
          validate :single_keeper

          private

          def single_keeper
          errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
          end
          end


          See https://guides.rubyonrails.org/active_record_validations.html#custom-methods






          share|improve this answer















          Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup and Assignment should be, but try this:



          class Keeper
          has_many :assignments
          end

          class Assignment
          belongs_to :keeper
          belongs_to :assignment_group # will need to add a reference to the assignments table
          end

          class AssignmentsGroup
          has_many :assignments
          has_many :keepers, through: assignments
          validate :single_keeper

          private

          def single_keeper
          errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
          end
          end


          See https://guides.rubyonrails.org/active_record_validations.html#custom-methods







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 16 '18 at 3:57

























          answered Nov 16 '18 at 2:39









          Simon L. BrazellSimon L. Brazell

          51639




          51639












          • whoops, forgot to add the belongs_to. Yes, Assignment belongs_to :assignment_group. My question is how can I add has_one :keeper to AssignmentGroup

            – dn1985
            Nov 16 '18 at 3:18











          • @dn1985 you can't cause there are many keepers if AssignmentsGroup has_many :assignments. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper validation.

            – Simon L. Brazell
            Nov 16 '18 at 3:38


















          • whoops, forgot to add the belongs_to. Yes, Assignment belongs_to :assignment_group. My question is how can I add has_one :keeper to AssignmentGroup

            – dn1985
            Nov 16 '18 at 3:18











          • @dn1985 you can't cause there are many keepers if AssignmentsGroup has_many :assignments. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper validation.

            – Simon L. Brazell
            Nov 16 '18 at 3:38

















          whoops, forgot to add the belongs_to. Yes, Assignment belongs_to :assignment_group. My question is how can I add has_one :keeper to AssignmentGroup

          – dn1985
          Nov 16 '18 at 3:18





          whoops, forgot to add the belongs_to. Yes, Assignment belongs_to :assignment_group. My question is how can I add has_one :keeper to AssignmentGroup

          – dn1985
          Nov 16 '18 at 3:18













          @dn1985 you can't cause there are many keepers if AssignmentsGroup has_many :assignments. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper validation.

          – Simon L. Brazell
          Nov 16 '18 at 3:38






          @dn1985 you can't cause there are many keepers if AssignmentsGroup has_many :assignments. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper validation.

          – Simon L. Brazell
          Nov 16 '18 at 3:38




















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330104%2fhas-one-association-through-has-many-with-dynamic-conditions-rails%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







          Popular posts from this blog

          Top Tejano songwriter Luis Silva dead of heart attack at 64

          ReactJS Fetched API data displays live - need Data displayed static

          政党