Im building an app where a
User belogns to several projects. Is this a good approach to create a "join table" that just tracks which
Projects are connected to which
Users? Is the
Collaboration model necessary?
class User < ApplicationRecord has_many :collaborations has_many :projects, through: :collaborations end class Project < ApplicationRecord has_many :collaborations has_many :users, through: :collaborations end class Collaboration < ApplicationRecord belongs_to :user belongs_to :project end
You only wrote that a user needs to be connected to several projects. If you also wanna connect a project to more than one user then this is the way to go, otherwise you could just say user has_many projects.
Thanks Szilard. Yes, a Project needs to have several Users. But Im not sure how to built controllers and views to make the associations. Should I create Controllers and views to the Collaboracion Model?
What @Szilard said is correct - your controllers / views could care less how your models are structured. You just need to know how to query the model from the controller to grab the results you want. They're not that tightly knit.
So in this case,
User.first.projects would list all the first users projects,
Project.first.users would list all the users associated with the first project. You can call these from any view/controller.
Thanks for the help Szilard and Jacob! I was having a hard time understanding exsactly what was going on with database and structure. Chris's series on building a forum really helped. Undestanding how to strcuture nested attributes. :)
If anyone want to check it out: https://gorails.com/series/how-to-build-a-forum