dax
dax

Reputation: 10997

Relationship advice/association logic in rails

I'm designing an application to create goals for a classroom - at the moment, the data relationships are modeled like this

enter image description here

I knew that out of inexperience I might run into problems and now I'm beginning to - specifically in my routes file - but also just for generally organizing the site and the data relationships.

When a user signs up, they add a student_group (or class), populate it with students and then add subjects. Later they add goals for each subject - although there should also be goals for a student_group, a student, or even the user. I was thinking of something like this - but would it be better as a has_many, through relationship?

Right now, I've only really done work on the User, Student_group, and Student models and these are fairly straight-forward. A user has many student_groups, and a student_group has many students. I'd like a second opinion before I proceed however, so that I don't have to end up going back and doing things over. Thanks!

Upvotes: 0

Views: 131

Answers (2)

Rails Guy
Rails Guy

Reputation: 3866

As I gone through your database design, I have found that you should have to use different type of relationships, that rails has provided us. I tried my best to design your schema as per my knowledge. you should define relationship in your model as I suggested below. Any good modification are highly appreciated.

User
 has_many :student_groups
 has_many :students, through: :student_groups
 has_many :goals, as: :goalable

StudentGroup
 belongs_to :user
 has_many :students
 has_many :goals, as: :goalable

Student
 belongs_to :student_group
 has_many :subjects
 has_many :characteristics
 has_many :goals, as: :goalable

Characteristic
 belongs_to :student

Goal
 belongs_to :goalable, polymorphic => true

I have defined some polymorphic associations in your schema. If you need any reference related to these association. visit http://guides.rubyonrails.org/association_basics.html

Hope it will help you. Thanks.

Upvotes: 0

bgates
bgates

Reputation: 2373

I think you might be thinking too far ahead. Once you have your app built around your current data model, you'll know better whether you even want to expand it to include the concept of a goal that isn't part of a student's subject. If you decide that it is, then making goals belong_to a subject, student, or user will be pretty simple. At that point, you could also do something like

Class Student
  has_many :personal_goals, class_name: "Goal"
  has_many :goals, through: :subjects

  def all_goals
    goals + personal_goals
  end

There's probably a more elegant way to model that last relationship. Would you need to go beyond that? Does it make sense to talk about a student group having a goal of its own? I don't know.

Upvotes: 1

Related Questions