gosukiwi
gosukiwi

Reputation: 1575

belongs_to and has_many of the same items

I'm modeling a lessons table, the lesson belongs to a user, the teacher and creator of the lesson, and also, the lesson can have many students, which are also users.

So it would be something like this

class Lesson < ActiveRecord::Base
  belongs_to :user
  has_many :users
end

I'd like to call the first user teacher, and the collection of users students, I've read the documentation at http://guides.rubyonrails.org/association_basics.html but I can't quite find what I want.

Upvotes: 2

Views: 59

Answers (2)

Paige Ruten
Paige Ruten

Reputation: 176665

This should have what you want: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

I think you want the class_name option:

class Lesson < ActiveRecord::Base
  belongs_to :teacher, class_name: "User"
  has_many :students, class_name: "User"
end

Upvotes: 4

SaschaM78
SaschaM78

Reputation: 4497

In your current code, all users could be the "owner" (teacher) of a lesson, instead you should have two additional classes "student" and "teacher" both having a 1:1 relation to the "user" class.

This would fit better:

class Teacher < ActiveRecord::Base
  has_one :user
end

class Student < ActiveRecord::Base
  has_one :user
end

class Lesson < ActiveRecord::Base
  belongs_to :teacher
  has_many :students
end

Upvotes: 0

Related Questions