2016-12-06 2 views
0

У меня есть 3 модели. Для бывших: а, Ь, сDeletes не распространяются в ассоциациях

a: 
has_many: bs 

b: 
belongs_to: a 
belongs_to: c 

c: 
has_many: bs 

так, теперь вопрос, когда я удалить запись в c, который связан с b, изменение отражается в b, но не в a.

Ожидаемое изменение: a.b.c Значение не имеет значения c. Но он не является нулевым и все еще показывает значение как раньше.

Когда я вручную обновляю конкретную запись в b и проверяю значение a.b.c, тогда это значение равно null.

Итак, есть ли решение исправить это? что-то вроде перезагрузки или обновления?

Спасибо.

PS: Я использую activescaffolding для выполнения действий.

РЕШЕНИЕ:

model c: 
has_many: bs, :dependent => :nullify 

Выше линии фиксированной мой вопрос. : D

+0

has_many: шс, зависимый:: разрушающий –

+0

зависит: уничтожить - это не удалить всю запись, а не сводит на нет значения? – Mounika

+0

Рассмотрите полиморфизм - http://guides.rubyonrails.org/association_basics.html#polymorphic-associations – marmeladze

ответ

0

Если у вас есть ассоциация has_many, у вас нет внешнего ключа, поэтому вам нужно сообщить другой стороне ассоциации, чтобы уничтожить себя.

Вы можете сделать это с помощью классификатора dependent: destroy на своих has_many ассоциациях. Например, если у вас есть:

class Author < ApplicationRecord 
    has_many :articles, dependent: :destroy 
end 

class Article < ApplicationRecord 
    belongs_to :author 
end 

, то вы можете сделать

author.destroy 

, и все Articles с author «s author_id будет уничтожен.

+0

Привет, У меня нет проблемы с первым уровнем ассоциации. Проблема: когда автор удален, статья успешно обновляется. Предположим, что эта статья принадлежит_группе: group. Автор в статье этой группы не аннулирует. – Mounika

0

post.rb

class Post < ActiveRecord::Base 
    has_many :comments , dependent: :destroy 
end 

comment.rb

class Comment < ActiveRecord::Base 
     belongs_to :post 
end 

Когда вы уничтожите разместить его уничтожить комментарий, связанный с той же должности.

post.destroy