2016-08-22 2 views
1

я следующие модели в моей схеме:Validation Failed с помощью кокона для Полиморфных ассоциаций

class Notification < ApplicationRecord 
    has_many :impacts, as: :impactable 
    accepts_nested_attributes_for :impacts, reject_if: :all_blank, allow_destroy: true 
end 

class Impact < ApplicationRecord 
    #association 
    belongs_to :impactable, polymorphic: true 

    #enum 
    enum impact_type: [:full_school, :standard, :section] 
end 

Всякий раз, когда я пытаюсь сохранить уведомления сейчас - я получаю ошибку - Validation failed: Impacts impactable must exist

Я пытался для создания ударов от уведомлений вручную с помощью Notification.last.impacts.create, и они отлично работают.

В чем проблема?

Подробнее - Когда я добавляю byebug к объекту @notification, прежде чем он сохраняет в контроллере - это выход -

>> @notification 
=> #<Notification id: nil, notification_type: "email", title: "Test", content: "Tomorrow is a holiday", created_at: nil, updated_at: nil> 

А также проверка это ассоциаций -

>> @notification.impacts 
=> #<ActiveRecord::Associations::CollectionProxy [#<Impact id: nil, impact_type: "standard", standard: 2, created_at: nil, updated_at: nil, impactable_id: nil, impactable_type: "Notification", section: "">]> 

ответ

2

Вам просто нужно добавить inverse_of: :impactable в вашу модель уведомлений.

has_many :impacts, as: :impactable, inverse_of: :impactable 
Смежные вопросы