2010-02-24 6 views
14

Je développe une application, avec un modèle d'années et un modèle de cours. Actuellement, il existe une relation has_and_belongs_to_many qui les relie à une table courses_years, mais j'aimerais stocker un champ supplémentaire dans la table courses_years.Ajouter des données supplémentaires à la table de jointure - Rails

Le nouveau champ est une valeur booléenne appelée "obligatoire".

Existe-t-il une manière simple ou agréable de le faire?

Répondre

13

Passez à l'utilisation d'une association :has_many => :through, qui est spécialement conçue pour lorsque vous avez besoin d'un modèle de jointure. Il y a plus de détails dans le ActiveRecord Associations Rails Guide.

+0

Merci beaucoup, des idées pour ma question de suivi? http://stackoverflow.com/questions/2328273/add-fields-for-has-many-through-relationship-extra-data-rails – Jack

12

Vous souhaitez un modèle de jointure. Je l'appellerais "CoursAnnée" parce que vous n'avez pas besoin de changer le nom de votre table, mais vous pouvez également déplacer toutes ces données vers un autre modèle si vous le souhaitez. Vos modèles seront configuration comme ceci:

class Courses < ActiveRecord::Base 
    has_many :courses_years 
    has_many :years, :through => :courses_years 
end 

class Years < ActiveRecord::Base 
    has_many :courses_years 
    has_many :courses, :through => :courses_years 
end 

class CoursesYears < ActiveRecord::Base 
    belongs_to :course 
    belongs_to :year 
end 

Chaque fois que vous avez besoin des attributs (obligatoire dans ce cas) vous accédez normalement à travers le joint modèle. Si vous voulez simplement trouver tous les cours obligatoires pour une année donnée, la réponse est here.

+0

Merci beaucoup, j'ai choisi Options comme nom de la table de jointure. Cependant, j'ai du mal à ajouter la valeur booléenne à mon nouveau formulaire de cours. Des idées? http://stackoverflow.com/questions/2328273/add-fields-for-has-many-through-relationship-extra-data-rails – Jack

+3

Les noms des classes de modèles doivent être au singulier: Cours -> Cours; Années -> Année CoursAnnées -> CoursAnnée –

Questions connexes