Добавление дополнительных данных в таблицу соединений - Rails

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

Новое поле является логическим значением, которое называется "принудительным".

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

Ответы

Ответ 1

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

Ответ 2

Вам нужна модель соединения. Я бы назвал его "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

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