Невозможно вставить объект в модель с ассоциациями

После обновления до 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
Другие вопросы по тегам