Ответ 1
Переключитесь на использование ассоциации :has_many => :through
, которая специально разработана, когда вам нужна модель объединения. Более подробная информация содержится в ActiveRecord Association Rails Guide.
Я разрабатываю приложение с моделью лет и моделью курсов. В настоящее время существует связь has_and_belongs_to_many, связывающая их с таблицей classes_years, однако я хотел бы сохранить дополнительное поле в таблице classes_years.
Новое поле является логическим значением, которое называется "принудительным".
Есть ли простой или приятный способ сделать это?
Переключитесь на использование ассоциации :has_many => :through
, которая специально разработана, когда вам нужна модель объединения. Более подробная информация содержится в ActiveRecord Association Rails Guide.
Вам нужна модель соединения. Я бы назвал его "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
Всякий раз, когда вам нужны атрибуты (обязательные в этом случае), вы обычно получаете доступ к нему через модель объединения. Если вы хотите просто найти все курсы, которые являются обязательными для данного года, на вопрос будет дан ответ здесь.