0
나는 Type has_many Dresses
입니다. Dress
테이블에 type_id
이라는 Type
모델을 참조하는 열이 있습니다. 내가하고 싶은 일은 Type
개체가 삭제 될 때마다 연결된 모든 Dress
개체가 type_id
을 nil
으로 업데이트합니다.Rails에서 고아 레코드 업데이트하기
지금까지, 나는 콘솔에서 이것을 시도하고 작동 : 그러나
> Dress.where(type_id: 3).update_all(type_id: nil)
, 나는이 같은 TypesController
에 번역 할 때 :
def destroy
type_id = params[:id]
if Type.find(type_id).destroy
Dress.where(:type_id => type_id).update_all(:type_id => nil)
redirect_to admins_path
end
end
을 ... 그리고 그것을 시도 브라우저에서 Type
개체는 삭제되지만 Dress
type_id
은 업데이트되지 않았습니다. 그것이 DELETE
명령에 올바르게 설정 그 전에 마지막 UPDATE
명령에 type_id = 0
을 설정하는 이유는 이해가 안
DELETE FROM "types" WHERE "types"."id" = $1 [["id", 3]]
UPDATE "types" SET position = (position - 1) WHERE (1 = 1 AND position > 2)
COMMIT
UPDATE "dresses" SET "type_id" = NULL WHERE "dresses"."id"
IN (SELECT "dresses"."id" FROM "dresses" WHERE "dresses"."type_id" = 0)
하지만 :
이
로그 출력됩니다.
예, 작동합니다. 처음 레일즈 가이드를 탐색 할 때 무효화 옵션을 알지 못했습니다. –