I’m pretty newb and trying to get a handle on setting up a particular relationship with my models.
For sake of this discussion (real app isn’t with tools but for illustration, using tools):
To start with (more complicated in a bit);
A User can have multiple tools
A single tool can only belong to one ToolGroup
A User can belong to multiple ToolGroups
To model this relationship, I was thinking:
User
has_many :tools
has_and_belong_to_many :tool_groups
Tool
has_one :tool_group
belongs_to :user
ToolGroup
has_and_belongs_to_many :users
So first question, is the above set up correctly?
Once the above is set up correctly, I want to have it set up where a ToolGroup can also be ‘owned’ by a User. In other words, a user will set up a ToolGroup and they are the owner, but other users can belong to this ToolGroup. How do I model that? Do I need to set up another model that is called “Owner” that is really a “User”? This doesn’t seem right. In reality the db table “ToolGroup” would just need an “ownerID” that would be a fk to the User table, but I’m not sure how to model that since ToolGroup already has a HABTM to users. Can I have a HABTM to Users and also a belongs_to :User?
My initial example is probably confusing. Here is another shot at it in something that has more meaning:
A User can create multiple “notices” ( eg “Corporate meeting notice”, “Big Sale Items”, “Job Wanted” )
A User can create multiple “notice groups” (eg “Corporate Notices”, “Public Notices”, “My Miscellaneous Notices”)
Every notice should belong to an “notice group”
A User needs to be able to subscribe to multiple “notice groups” so that they could see the notices in the different groups they’re subscribed to.
How would I also model that a “NoticeGroup” is ‘owned/created’
by a particular user? Right now the HABTM on NoticeGroup seems to imply
that the NoticeGroup can belong to many Users but I also need it to show that its owned/created by a particular User (owner_id concept on NoticeGroup?), can I have a HABTM :users and a belongs_to :User in the same NoticeGroup model definition?
My initial example is probably confusing. Here is another shot at it in
something that has more meaning:
A User can create multiple “notices” ( eg “Corporate meeting notice”,
“Big
Sale Items”, “Job Wanted” )
A User can create multiple “notice groups” (eg “Corporate Notices”,
“Public
Notices”, “My Miscellaneous Notices”)
Are these notice groups specific to the one user, or are they more like
global discussion topics?
Can notice groups contain notices created by users other than the one
who created the group?
Every notice should belong to an “notice group”
A User needs to be able to subscribe to multiple “notice groups” so that
they could see the notices in the different groups they’re subscribed
to.
To model this relationship, I was thinking:
User
has_many :notices
has_and_belong_to_many :notice_groups
Notice
has_one :notice_group
That should be belongs_to, not has_one.
belongs_to :user
NoticeGroup
has_and_belongs_to_many :users
So first question, is the above set up correctly?
Maybe, maybe not. Depends on the questions above.
How would I also model that a “NoticeGroup” is ‘owned/created’ by a
particular user? Right now the HABTM on NoticeGroup seems to imply that
the
NoticeGroup can belong to many Users but I also need it to show that its
owned/created by a particular User (owner_id concept on NoticeGroup?),
can I
have a HABTM :users and a belongs_to :User in the same NoticeGroup model
definition?