Невозможно вставить объект в модель с ассоциациями
После обновления до Rails 5.2 с Rails 4 у меня возникли некоторые проблемы с ассоциациями моделей.
У меня есть модельное событие, в котором пользователи являются участниками события, и каждое событие имеет один резерв для пользователей, которые хотят посетить его позже.
# app/models/event.rb
class Event < ApplicationRecord
# Events has many Users through subcsriptions
has_many :subscriptions
has_one :reserve
has_many :users, :through => :subscriptions
...
end
Резервная модель:
# app/models/reserve.rb
class Reserve < ApplicationRecord
belongs_to :event, optional: true
has_many :subscriptions
has_many :users, :through => :subscriptions
end
Модель подписки:
class Subscription < ApplicationRecord
belongs_to :event
belongs_to :reserve
belongs_to :user
end
Когда я пытаюсь нажать пользователя, чтобы зарезервировать событие ИЛИ:
@event.users << current_user
я получил эту ошибку:
ActiveRecord::RecordInvalid (Validation failed: Reserve must exist):
Почему резерв требуется для проверки? Очевидно, что Резервировать НЕ обязательно.
1 ответ
Решение
ActiveRecord::RecordInvalid (проверка не удалась: резерв должен существовать)
Ты можешь использовать optional: true
в belongs_to
как ниже, чтобы избежать ошибки.
class Subscription < ApplicationRecord
belongs_to :event
belongs_to :reserve, optional: true
belongs_to :user
end