2010-02-24 25 views
14

Pracuję nad aplikacją z modelem lat i modelem kursów. Obecnie istnieje relacja has_and_belongs_to_many łącząca je z tabelą courses_years, jednak chciałbym zapisać dodatkowe pole w tabeli courses_years.Dodaj dodatkowe dane do tabeli łączenia - Railsy

Nowe pole jest wartością boolowską zwaną "obowiązkową".

Czy istnieje prosty lub przyjemny sposób na zrobienie tego?

Odpowiedz

13

Przejdź do korzystania z powiązania :has_many => :through, które zostało zaprojektowane specjalnie dla potrzeb modelu łączenia. Więcej szczegółów w ActiveRecord Associations Rails Guide.

+0

Wielkie dzięki, jakieś pomysły na moje następne pytanie? http://stackoverflow.com/questions/2328273/add-fields-for-has-many-through-relationship-extra-data-rails – Jack

12

Potrzebujesz modelu łączenia. Nazwałbym to "CoursesYear", ponieważ wtedy nie trzeba zmieniać nazwy tabeli, ale można również przenieść wszystkie te dane do innego modelu, jeśli chcesz. Twoje modele będą setup tak:

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 

Gdy trzeba atrybuty (obowiązkowe w tym przypadku) normalnie do niego dostęp za pośrednictwem modelu przyłączyć. Jeśli chcesz znaleźć wszystkie kursy obowiązkowe w danym roku, odpowiedź na to pytanie brzmi: here.

+0

Wielkie dzięki, wybrałem opcję Opcje jako nazwę tabeli łączenia. Mam problem z dodaniem wartości boolowskiej do mojego nowego formularza kursów. Jakieś pomysły? http://stackoverflow.com/questions/2328273/add-fields-for-has-many-through-relationship-extra-data-rails – Jack

+3

Nazwy klas modeli powinny mieć formę w liczbie pojedynczej: Kursy -> Kurs; Lata -> Rok; KursyYears -> CourseYear –

Powiązane problemy