Подтвердить что ты не робот

Как использовать зависимые:: destroy in rails?

У меня есть 2 модели, как описано ниже.

class EmpGroup < ActiveRecord::Base
  belongs_to :user
  has_many :emp_group_members, dependent: :destroy
end

и

class EmpGroupMember < ActiveRecord::Base
  belongs_to :emp_group
  belongs_to :user
end

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

PG::ForeignKeyViolation: ERROR:  update or delete on table "emp_groups" violates foreign key constraint "fk_rails_bd68440021" on table "emp_group_members"
DETAIL:  Key (id)=(1) is still referenced from table "emp_group_members".

Что мне не хватает?

Спасибо.

4b9b3361

Ответ 1

Добавьте каскадное удаление в модель EmpGroup:

class EmpGroup < ActiveRecord::Base
   has_many :emp_group_members, :dependent => :delete_all
end

или

Вы называете метод delete? вы должны называть destroy. Используйте .destroy

Ответ 2

: зависимый является одним из вариантов, доступных в присваивании ассоциации

If you set the :dependent option to:

:destroy, when the object is destroyed, destroy will be called on its associated objects.
:delete, when the object is destroyed, all its associated objects will be deleted directly from the database without calling their destroy method.

Additionally, objects will be destroyed if they're associated with dependent: :destroy, and deleted if they're associated with dependent:: delete_all.

в has_many:

:destroy causes all the associated objects to also be destroyed
:delete_all causes all the associated objects to be deleted directly from the database (so callbacks will not execute)

вы можете попробовать

 emp_member_1= @emp_group.emp_group_members.first
 ##delete associated record
 @emp_group.emp_group_members.delete(emp_member_1)

Ответ 3

Когда вы удаляете группу, вы используете удаление или уничтожение. - У меня была эта ошибка раньше, и это было потому, что у меня была опечатка и я использовал .delete вместо .destroy