2010-02-24 4 views
14

Я разрабатываю приложение с моделью лет и моделью курсов. В настоящее время есть отношения has_and_belongs_to_many, связывающие их с таблицей classes_years, однако я хотел бы сохранить дополнительное поле в таблице classes_years.Добавить дополнительные данные в таблицу соединений - Rails

Новое поле является логическим значением, которое называется «обязательным».

Есть ли простой или приятный способ сделать это?

ответ

13

Переключиться на использование ассоциации :has_many => :through, которая специально разработана для случая, когда вам нужна модель соединения. В разделе ActiveRecord Associations Rails Guide есть более подробная информация.

+0

Большое спасибо, любые идеи для моего последующего вопроса? http://stackoverflow.com/questions/2328273/add-fields-for-has-many-through-relationship-extra-data-rails – Jack

12

Вы хотите модель объединения. Я бы назвал его «CoursesYear», потому что вам не нужно менять имя таблицы, но вы можете также переместить все эти данные в другую модель, если хотите. Ваши модели будут настроены так:

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 

Всякий раз, когда вам нужны атрибуты (обязательные в данном случае) вы обычно доступ к нему через модель соединения. Если вы хотите просто найти все курсы, которые являются обязательными для данного года, на вопрос будет дан ответ here.

+0

Большое спасибо, я выбрал Options как имя таблицы join. Однако мне трудно добавить логическое значение в мою новую форму обучения. Есть идеи? http://stackoverflow.com/questions/2328273/add-fields-for-has-many-through-relationship-extra-data-rails – Jack

+3

Названия классов моделей должны быть в единственном числе: Курсы -> Курс; Годы -> год; Курсы года -> CourseYear –

Смежные вопросы