web-dev-qa-db-ja.com

dependent::destroyを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".

私は何が欠けていますか?

26
sank

EmpGroupモデルにカスケード削除を追加します。

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

または

deleteメソッドを呼び出していますか?代わりにdestroyを呼び出す必要があります。つかいます .destroy

24
Umar Khan

:dependentbelongs_toアソシエーションで利用可能なオプションの1つです

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: :すべて削除。

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)
16
Milind

グループを削除するとき、deleteまたはdestroyを使用していますか。 -以前にこのエラーが発生したことがありますが、これはタイプミスがあり、.destroyの代わりに.deleteを使用していたためです。

1
abbott567