2011-03-08 3 views
0

Voici les modèles qui correspondent à mon problème. J'essaie de concevoir un moyen d'afficher CourseEnrollments avec leurs étapes à un patient donné. Voici ce que j'ai trouvé jusqu'à présent.Essayer de concevoir un contrôleur pour afficher les cours (Rails)

INDEX ACTION -/course_enrollments/-> Afficher les cours auxquels l'utilisateur est inscrit, ainsi que l'aperçu du cours le plus récent. Cela peut rediriger vers le cours le plus récent.

ACTION SHOW -/course_enrollments /: id -> Cours d'affichage utilisateur est inscrit ainsi que la liste des cours les plus récents

La partie que je me bats pour comprendre comment afficher une étape individuelle pour cours. Cela devrait-il être fait dans le controller course_steps (qui est imbriqué dans la ressource des cours)?

class Course < ActiveRecord::Base 
    belongs_to :course_category 
    belongs_to :client 
    belongs_to :user_created, :foreign_key => :user_created_by, :class_name => "User" 
    belongs_to :user_updated, :foreign_key => :user_last_updated_by, :class_name => "User" 
    has_many :course_steps, :dependent => :destroy 
    has_many :steps, :through => :course_steps 
    has_many :course_requests, :dependent => :destroy 
    has_many :course_enrollments, :dependent => :destroy 
    has_many :patients, :through =>:course_enrollments 
end 

class CourseStep < ActiveRecord::Base 
    belongs_to :step 
    belongs_to :course 

validates_uniqueness_of :step_id, :scope => :course_id 
end 

class Step < ActiveRecord::Base 
belongs_to :step_type 
belongs_to :client 
has_one :step_quiz, :dependent => :destroy 
has_one :step_survey, :dependent => :destroy 
has_one :step_text, :dependent => :destroy 
has_one :step_download, :dependent => :destroy 
has_one :step_video, :dependent => :destroy 
has_one :step_presentation, :dependent => :destroy 
has_many :course_steps, :dependent => :destroy 
has_many :courses, :through => :course_steps 
end 


class CourseEnrollment < ActiveRecord::Base 
    belongs_to :patient 
    belongs_to :course 
end 

class Patient < ActiveRecord::Base 
    belongs_to :user, :dependent => :destroy 
    has_many :enrollments, :dependent => :destroy 
    has_many :clients, :through => :enrollments 
    has_many :course_requests, :dependent => :destroy 
    has_many :course_enrollments, :dependent => :destroy 
    has_many :courses, :through => :course_enrollments 
end 

Répondre

0

L'approche habituelle consiste à imbriquer ces éléments et à avoir un type de chemin composé, mais la manière dont vous acheminez ces éléments dépend souvent du niveau de contexte impliqué. Par exemple, est-ce que l'affichage d'un cours conduit par un utilisateur dans la mesure où le chemin doit y inclure l'utilisateur, ou est-ce simplement personnaliser la page du cours?

En général, vous voyez des choses comme ceci:

resources :courses do |course| 
    course.resources :enrollments 
    course.resources :steps 
end 

Il y a habituellement une corrélation entre vos has_many relations et la déclaration d'un resources équivalent, mais pas toujours. Jetez un oeil sur les routes générées en utilisant rake routes pour voir quels seront les paramètres qui seront appelés lors de la transmission à votre contrôleur, ainsi que le nom du contrôleur attendu. Vous pouvez personnaliser le nom du contrôleur en transmettant une option :controller à l'itinéraire.

Généralement, le dernier enregistrement dans le chemin est transmis en tant que :id tandis que les précédents sont nommés, tels que :course_id. C'est une incohérence quelque peu ennuyante, alors faites attention de vérifier que vous chargez en utilisant les paramètres corrects.

0

Si vous devez afficher une étape individuelle pour un cours, vous devez absolument utiliser le contrôleur course_steps, être logique, chaque objet CourseStep est une combinaison d'un cours et une étape.

Questions connexes