Hi SD Ruby,

I am trying to build a Rails app and I am running into road blocks with 
"database design".

The app must allow users to create and share agendas with other users.

In addition, we must be able to:

   - Display a list of agendas for each user, on his profile
   - Display a list of users associated with an agenda, on the agenda's page
   - When sharing an agenda with another user, define a role for this user, 
   and display the role of this user on the list mentioned right above.
   - On a user's profile, in the list of his agendas, we could also mention 
   his role for each agenda

I was going to go with a has_and_belongs_to_many association between the 
user and the agenda models, like that:

class User < ActiveRecord::Base
  has_and_belongs_to_many :agendasend
class Agenda < ActiveRecord::Base
  has_and_belongs_to_many :usersend

But then I wondered whether this would let me get and display the 
@user.agenda.user.role list ofroles on the given agenda page of a given 
user.

And I thought I should probably go with a has_many :through association 
instead, such as:

class User < ActiveRecord::Base
  has_many :roles
  has_many :agendas, through: :rolesend
class Role < ActiveRecord::Base
  belongs_to :user
  belongs_to :agendaend
class Agenda < ActiveRecord::Base
  has_many :roles
  has_many :users, through: :rolesend

And although I was pretty comfortable about the idea of a user having 
several roles (one for each agenda), I am not sure about the idea of an 
agenda having several roles (one for each user?).

Finally, to add to the confusion, I read about the polymorphic association 
and thought it could also be a viable solution, if done this way for 
instance:

class Role < ActiveRecord::Base
  belongs_to :definition, polymorphic: trueend
class User < ActiveRecord::Base
  has_many :roles, as: :definitionend
class Agenda < ActiveRecord::Base
  has_many :roles, as: :definitionend

Does any of the above solutions sound right for the situation?

*UPDATE*: Doing some research, I stumbled upon this article (from 2012) 
explaining that has_many :through was a "smarter" choice than 
has_and_belongs_to_many. In my case, I am still not sure about the fact 
that an agenda would have many roles.

*UPDATE 2*: I also asked this question on Stack Overflow and someone in the 
comments suggested that a way of solving this would be to go with two join 
tables. I tried to implement the following code:

class User < ActiveRecord::Base
  has_many :agendas, through: :jointableend
class Agenda < ActiveRecord::Base
end
class Role < ActiveRecord::Base
end
class Jointable < ActiveRecord::Base
  belongs_to :user
  belongs_to :agenda
  has_many :agendaroles through :jointable2end
class Jointable2 < ActiveRecord::Base
  belongs_to :roles
  belongs_to :useragendaend

I am not sure about the syntax though. Am I on the right track? And how 
should I define the Agenda and the Role models?

-- 
-- 
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
--- 
You received this message because you are subscribed to the Google Groups "SD 
Ruby" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to