-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Salut tout le monde,
Pour mon projet d'app adopt a noob, qui a vocation à mettre en relation des mentors et des apprentis autour d'un projet commun, il est important que j'associe correctement mes modèles mais je ne suis pas certain que mon approche corresponde à ce que je souhaite. Je voudrais qu'un user puisse accéder à un projet créé par un autre user. Ensuite, un user pourrait s'associer à chaque projet en déclarant être mentor ou apprenti. Ce même user pourrait donc changer de rôle selon le projet auquel il participe.
J'avais pensé à une association many to many
class User < ActiveRecord::Base
has_many :roles
has_many :projects, through: :roles
end
class Project < ActiveRecord::Base
has_many :users, through: :roles
has_many :roles
end
class Role < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
Dans le tableau roles, il y aurait les colonnes id, updated_at, created_at, project_id, user_id, (et je pensais à un booleén du type) "apprentis?" .
- Corrigez-moi si je me trompe, mais si j'avais employé une association du type has_and_belongs_to_many (habtm) entre User et Project, chaque user aurait son rôle figé pour tous les projets auxquels il participe?
- Concernant "apprentis?", j'imagine qu'il va me falloir définir une fonction "apprentis?". Là, il y a deux scénarios :
- je créée la fonction dans le model ou pour être plus propre dans un module dans app/models/concerns/current_role.rb ce qui à mon avis ressemblerait à qqc comme ça.
module CurrentRole
extend ActiveSupport::Concern
private
def apprentis?
# là faut que je réfléchisse encore, d'ailleurs si vous avez des idées :)
true
else
false
end
end
- dans le cas où je souhaite que cette fonction soit accessible par mes views et controllers, est-ce que c'est là qu'il est intéressant de faire des services (synonyme de Service Object?)?
Yeah, j'ai presque fini! Poser des questions sur github ou stackoverflow est un art difficile à maitriser, j'espère avoir été assez précis sans être ennuyeux.
Merci