user1076802
user1076802

Reputation: 317

User and Team modeling

I have been doing some searching around Google and this site for some ways to go about constructing some models for an application I am working on.

I plan to have Users and Teams. A user can join a team and one team only. A team can obviously have many users. Also, I want to add a 'leader' role inside the team that is assigned to the User who creates a Team but can later be passed on to another User who is already a part of that team.

I have seen some examples of models for something like this and saw a few like this:

class User < ActiveRecord::Base
    has_one :team
    has_many :memberships
end

class Membership < ActiveRecord::Base
    belongs_to :user
    belongs_to :team
end

class Team < ActiveRecord::Base
    has_many :memberships
    has_many :users, :through => :memberships
end

Why is the Membership model necessary? I have seen it in a few examples and I am not sure I quite follow the logic of why it is in there and what it is doing.

Also, if I did something like has_one :leader in the Team model and had the Leader model, would that be considered the best practice for determining a leader in a Team? It seems like a bit much to have an entire model/table for Leader.

Upvotes: 0

Views: 1493

Answers (1)

xkickflip
xkickflip

Reputation: 768

The Memberships model is allowing for a many-to-many relationship there. It's acting as the join table. It would allow Users to belong to many Teams and Teams to have many Users.

Sounds like you just want a one-to-many though?

class User < ActiveRecord::Base
  belongs_to :team
end

class Team < ActiveRecord::Base
  has_many :users
end

I'll have to double check this part but you can use additional parameters to specify the models in your assocation if they don't match up with the name you need. So Team could have a leader that's just a User model.

class Team < ActiveRecord::Base
  has_many :users
  has_one :leader, :class_name => "User", :foreign_key => "user_id"
end

the rails guides page on associations has a good summary including the part about the :class_name and other options http://guides.rubyonrails.org/association_basics.html#the-has_many-association

Upvotes: 2

Related Questions