2012-05-28 4 views
0

나는 Type has_many Dresses입니다. Dress 테이블에 type_id이라는 Type 모델을 참조하는 열이 있습니다. 내가하고 싶은 일은 Type 개체가 삭제 될 때마다 연결된 모든 Dress 개체가 type_idnil으로 업데이트합니다.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 개체는 삭제되지만 Dresstype_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) 

하지만 :

로그 출력됩니다.

답변

2
class Type < ActiveRecord::Base 
    has_many :dresses, :dependent => :nullify 
    ... 
end 

작동하지 않습니까?

+0

예, 작동합니다. 처음 레일즈 가이드를 탐색 할 때 무효화 옵션을 알지 못했습니다. –