rails 5 active record model setup help two user types
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
add a comment |
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
add a comment |
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
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
activerecord ruby-on-rails-5 rails-activerecord
asked Nov 13 '18 at 19:17
rhosynrhosyn
12
12
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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
add a comment |
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
);
);
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%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
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
add a comment |
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
add a comment |
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
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
answered Nov 26 '18 at 8:15
rayray
1,8141319
1,8141319
add a comment |
add a comment |
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.
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%2f53288058%2frails-5-active-record-model-setup-help-two-user-types%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