2008-11-25 8 views
0

I ont deux modèles (utilisateurs et cours) et une table de jointure qui permet les inscriptions au cours:Comment puis-je demander à l'utilisateur de créer une table has_many: through sans attributs utilisateur?

class User < ActiveRecord::Base 
has_many :enrollments, :dependent => :destroy 
has_many :courses,  :through => :enrollments 
end 

class Course < ActiveRecord::Base 
has_many :enrollments, :dependent => :destroy 
has_many :users,  :through => :enrollments 
end 

class Enrollment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :course 
end 

Les inscriptions REJOIGNEZ table a d'autres attributs tels que la catégorie, pour cent terminé, etc. Cependant, aucun des les attributs requièrent une entrée de l'utilisateur, autre que l'inscription. Idéalement, j'aimerais avoir un lien new_course_enrollment(@course, {:user_id => current_user}) qui crée l'inscription en arrière-plan (inutile à l'utilisateur d'entrer quoi que ce soit) et redirige vers la page des cours, avec le lien «inscription» remplacé par le statut «inscrit». Existe-t-il un moyen de le faire dans les modèles, sans avoir besoin de modifier l'action par défaut RESTful Enrollments # new controller?

Répondre

1

Il y a plusieurs façons de procéder.

Dans la vue, vous pouvez créer un formulaire en ligne avec le texte d'ancrage «S'inscrire maintenant», en pointant sur votre méthode «Nouvel enregistrement_cours».

Le formulaire doit avoir un champ masqué avec l'ID de cours.

Ensuite, dans votre contrôleur, vous avez besoin de ce code.

def new_course_enrollment 
    e = Enrollement.new 
    e.user_id = current_user 
    e.course_id = params[:course_id] 
    e.save 

    redirect_to :action => 'index' # list of courses here 
end 

Vous pouvez bien sûr factoriser ce code pour le rendre plus court, le déplacer vers une méthode privée dans le contrôleur ou, plus logiquement, au modèle d'inscription elle-même.

Questions connexes