rails 5 active record model setup help two user types










0















I am trying to work out the best DB structure to power this setup:



I have two types of user: sales and market.
Each user can have a number of clients.
Each client can have a number of transactions.Transactions will be assigned a transaction type: 'sales' or 'market'. Each client can have only one sales user and one market user.



I need to be able to retrieve a list of transactions for each user, so for a 'sales' user, user.transactions returns all transactions with a 'sales' type for all clients where the client's 'sales' user is that user



I have started out with the following setup but can't get all the queries I need, for example:



u = User.find(5)
Transaction.all.where(sales_ee: u)
# This is returning nothing


This is the setup so far:



class User < ApplicationRecord
has_many :sales_clients, :class_name => "Client", :foreign_key => "sales_ee_id"
has_many :market_traders, :class_name => "Client", :foreign_key => "market_ee_id"
has_many :clients, dependent: :destroy
has_many :transactions, :through => :traders
end

class Client < ApplicationRecord
belongs_to :sales_ee, :class_name => 'User', optional: true
belongs_to :market_ee, :class_name => 'User', optional: true
has_many :transactions, dependent: :destroy
belongs_to :user
end

class Transaction < ApplicationRecord
belongs_to :client
has_one :user, :through => :client
has_one :sales_ee, :through => :client
has_one :market_ee, :through => :client, required: false
end


I'm not sure if having two classes of user may be a more appropriate setup - any help would be much appreciated.










share|improve this question


























    0















    I am trying to work out the best DB structure to power this setup:



    I have two types of user: sales and market.
    Each user can have a number of clients.
    Each client can have a number of transactions.Transactions will be assigned a transaction type: 'sales' or 'market'. Each client can have only one sales user and one market user.



    I need to be able to retrieve a list of transactions for each user, so for a 'sales' user, user.transactions returns all transactions with a 'sales' type for all clients where the client's 'sales' user is that user



    I have started out with the following setup but can't get all the queries I need, for example:



    u = User.find(5)
    Transaction.all.where(sales_ee: u)
    # This is returning nothing


    This is the setup so far:



    class User < ApplicationRecord
    has_many :sales_clients, :class_name => "Client", :foreign_key => "sales_ee_id"
    has_many :market_traders, :class_name => "Client", :foreign_key => "market_ee_id"
    has_many :clients, dependent: :destroy
    has_many :transactions, :through => :traders
    end

    class Client < ApplicationRecord
    belongs_to :sales_ee, :class_name => 'User', optional: true
    belongs_to :market_ee, :class_name => 'User', optional: true
    has_many :transactions, dependent: :destroy
    belongs_to :user
    end

    class Transaction < ApplicationRecord
    belongs_to :client
    has_one :user, :through => :client
    has_one :sales_ee, :through => :client
    has_one :market_ee, :through => :client, required: false
    end


    I'm not sure if having two classes of user may be a more appropriate setup - any help would be much appreciated.










    share|improve this question
























      0












      0








      0








      I am trying to work out the best DB structure to power this setup:



      I have two types of user: sales and market.
      Each user can have a number of clients.
      Each client can have a number of transactions.Transactions will be assigned a transaction type: 'sales' or 'market'. Each client can have only one sales user and one market user.



      I need to be able to retrieve a list of transactions for each user, so for a 'sales' user, user.transactions returns all transactions with a 'sales' type for all clients where the client's 'sales' user is that user



      I have started out with the following setup but can't get all the queries I need, for example:



      u = User.find(5)
      Transaction.all.where(sales_ee: u)
      # This is returning nothing


      This is the setup so far:



      class User < ApplicationRecord
      has_many :sales_clients, :class_name => "Client", :foreign_key => "sales_ee_id"
      has_many :market_traders, :class_name => "Client", :foreign_key => "market_ee_id"
      has_many :clients, dependent: :destroy
      has_many :transactions, :through => :traders
      end

      class Client < ApplicationRecord
      belongs_to :sales_ee, :class_name => 'User', optional: true
      belongs_to :market_ee, :class_name => 'User', optional: true
      has_many :transactions, dependent: :destroy
      belongs_to :user
      end

      class Transaction < ApplicationRecord
      belongs_to :client
      has_one :user, :through => :client
      has_one :sales_ee, :through => :client
      has_one :market_ee, :through => :client, required: false
      end


      I'm not sure if having two classes of user may be a more appropriate setup - any help would be much appreciated.










      share|improve this question














      I am trying to work out the best DB structure to power this setup:



      I have two types of user: sales and market.
      Each user can have a number of clients.
      Each client can have a number of transactions.Transactions will be assigned a transaction type: 'sales' or 'market'. Each client can have only one sales user and one market user.



      I need to be able to retrieve a list of transactions for each user, so for a 'sales' user, user.transactions returns all transactions with a 'sales' type for all clients where the client's 'sales' user is that user



      I have started out with the following setup but can't get all the queries I need, for example:



      u = User.find(5)
      Transaction.all.where(sales_ee: u)
      # This is returning nothing


      This is the setup so far:



      class User < ApplicationRecord
      has_many :sales_clients, :class_name => "Client", :foreign_key => "sales_ee_id"
      has_many :market_traders, :class_name => "Client", :foreign_key => "market_ee_id"
      has_many :clients, dependent: :destroy
      has_many :transactions, :through => :traders
      end

      class Client < ApplicationRecord
      belongs_to :sales_ee, :class_name => 'User', optional: true
      belongs_to :market_ee, :class_name => 'User', optional: true
      has_many :transactions, dependent: :destroy
      belongs_to :user
      end

      class Transaction < ApplicationRecord
      belongs_to :client
      has_one :user, :through => :client
      has_one :sales_ee, :through => :client
      has_one :market_ee, :through => :client, required: false
      end


      I'm not sure if having two classes of user may be a more appropriate setup - any help would be much appreciated.







      activerecord ruby-on-rails-5 rails-activerecord






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 13 '18 at 19:17









      rhosynrhosyn

      12




      12






















          1 Answer
          1






          active

          oldest

          votes


















          0














          Changes



           class Client < ApplicationRecord
          - belongs_to :sales_ee, :class_name => 'User', optional: true
          + belongs_to :sales_ee, :class_name => 'User', :foreign_key => "sales_ee_id", optional: true
          - belongs_to :market_ee, :class_name => 'User', optional: true
          + belongs_to :market_ee, :class_name => 'User', :foreign_key => "market_ee_id", optional: true
          has_many :transactions, dependent: :destroy
          belongs_to :user
          end





          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',
            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%2f53288058%2frails-5-active-record-model-setup-help-two-user-types%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














            Changes



             class Client < ApplicationRecord
            - belongs_to :sales_ee, :class_name => 'User', optional: true
            + belongs_to :sales_ee, :class_name => 'User', :foreign_key => "sales_ee_id", optional: true
            - belongs_to :market_ee, :class_name => 'User', optional: true
            + belongs_to :market_ee, :class_name => 'User', :foreign_key => "market_ee_id", optional: true
            has_many :transactions, dependent: :destroy
            belongs_to :user
            end





            share|improve this answer



























              0














              Changes



               class Client < ApplicationRecord
              - belongs_to :sales_ee, :class_name => 'User', optional: true
              + belongs_to :sales_ee, :class_name => 'User', :foreign_key => "sales_ee_id", optional: true
              - belongs_to :market_ee, :class_name => 'User', optional: true
              + belongs_to :market_ee, :class_name => 'User', :foreign_key => "market_ee_id", optional: true
              has_many :transactions, dependent: :destroy
              belongs_to :user
              end





              share|improve this answer

























                0












                0








                0







                Changes



                 class Client < ApplicationRecord
                - belongs_to :sales_ee, :class_name => 'User', optional: true
                + belongs_to :sales_ee, :class_name => 'User', :foreign_key => "sales_ee_id", optional: true
                - belongs_to :market_ee, :class_name => 'User', optional: true
                + belongs_to :market_ee, :class_name => 'User', :foreign_key => "market_ee_id", optional: true
                has_many :transactions, dependent: :destroy
                belongs_to :user
                end





                share|improve this answer













                Changes



                 class Client < ApplicationRecord
                - belongs_to :sales_ee, :class_name => 'User', optional: true
                + belongs_to :sales_ee, :class_name => 'User', :foreign_key => "sales_ee_id", optional: true
                - belongs_to :market_ee, :class_name => 'User', optional: true
                + belongs_to :market_ee, :class_name => 'User', :foreign_key => "market_ee_id", optional: true
                has_many :transactions, dependent: :destroy
                belongs_to :user
                end






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 26 '18 at 8:15









                rayray

                1,8141319




                1,8141319



























                    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%2f53288058%2frails-5-active-record-model-setup-help-two-user-types%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

                    政党