Thanks Nicholas.

Except the Administrator of the app, everyone only has roles attached to 
agendas: a role is defined by a couple "user / agenda".

Le lundi 22 juin 2015 13:20:19 UTC-7, Nicholas Shook a écrit :
>
> Can someone have a role that is not attached to an agenda? If so I think I 
> would prefer setting it up so Agendas have many Roles.
>
> class User < ActiveRecord::Base
>   has_many :agendas
>   has_many :roles, through: agendas
> end
>
> class Agenda < ActiveRecord::Base
>   belongs_to :user
>   has_many :roles
> end
>
> class Role < ActiveRecord::Base
>   belongs_to :agenda
> end
>
> If a role is more general, I'd take a look at how people do authorization. 
> At Q-Centrix we have a user table, a roles table, and a join-table of the 
> two. We then use the user_role join table to handle authorization for other 
> resources (including what could be an agenda in your app), e.g. can this 
> person access this endpoint if they have the admin role.
>
> I probably missed some stuff, lmk how else I can help.
>
> On Sunday, June 21, 2015 at 10:36:18 PM UTC-7, Thibaud Clément wrote:
>>
>> 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