Я работаю над проектом Ruby on Rails для одного из моих классов, и мое текущее задание требует, чтобы я разрешил пользователям записываться на курсы.У меня есть три модели: Пользователь, Курс и таблица ассоциативного соединения, которая принадлежит обеим, Регистрация.Текущие настройки в rb-файле каждой модели:
class Enrollment < ApplicationRecord
belongs_to :user
belongs_to :course
end
class Course < ApplicationRecord
has_many :enrollments
has_many :users, through: :enrollments
end
class User < ApplicationRecord
has_many :enrollments
has_many :courses, through: :enrollments
end
Основная проблема заключается в том, что всякий раз, когда я пытаюсь добавить новую запись в модель Enrollment из консоли rails, выдается сообщение об ошибке:
[4] pry(main)> enrollment = Enrollment.new(u_id: 1, c_id: 1)
=> #<Enrollment:0x00007f94bc771020 id: nil, u_id: 1, c_id: 1, ...>
[5] pry(main)> enrollment.save
(0.1ms) begin transaction
(0.1ms) rollback transaction
=> false
[6] pry(main)> enrollment.errors
=> #<ActiveModel::Errors:0x00007f94bc7c7290
@base=#<Enrollment:0x00007f94bc771020 id: nil, u_id: 1, c_id: 1, created_at:
nil, updated_at: nil>,
@details={:user=>[{:error=>:blank}], :course=>[{:error=>:blank}]},
@messages={:user=>["must exist"], :course=>["must exist"]}>
В нем утверждается, что пользователь и курс должны существовать, но обе модели заполнены и работают по отдельности.Однако, изменив мой enrollment.rb на:
class Enrollment < ApplicationRecord
belongs_to :user, optional: true
belongs_to :course, optional: true
end
, это позволяет мне добавить новую запись регистрации просто отлично.Кто-нибудь знает, почему мне нужно «опционально: правда», чтобы это работало?Кто-нибудь знает способ исправить это, не используя «опционально: правда»?Любая помощь будет оценена.Я также хочу рассказать подробнее, пожалуйста, дайте мне знать.
Спасибо!