0

제목과 마찬가지로 방금 만든 레코드의 ID를 얻으려고 시도하지만 콘솔에서 가져 오려고했지만 ID는 0입니다.레일 3 after_create에서 현재 레코드 ID를 얻는 방법

여기에 내가 after_create

<Unit id: nil, uuid: "9f11be13-8d07-4471-a3bb-f87943966bbd", organization_id: 33, property_id: 430, door_number: "3", created_at: "2014-12-05 13:27:57", updated_at: "2014-12-05 13:27:57", deleted_at: nil, size: "5 1/2", door_number_int: 3, leases_count: 0, tasks_count: 0, notes: nil, state_id: 68, state_tasks_count: 2, current_lease_id: nil, next_lease_id: nil, state_tasks_serie: 1, state_tasks_serie_count: 2, price_asked: #<BigDecimal:7fc79162cb80,'0.123E3',9(18)>, availability_date: nil, comments_count: 0> 

의 시작 부분에 콘솔에서 자신의받은 인쇄 레코드 ID에 대한 액세스 권한을 얻을 수있는 방법이 있나요입니까? 레코드가 한 번만 생성되기 때문에 무한 루프가 발생하지 않습니다 :

내가 그것은 아주 예쁜 아니지만이 @MarekLipka에 대답하기 위해

일을 지금까지

after_create 
    self.save 
end 

before_save 
    if self.id.present? 
    # do stuff 
    end 
end 

을 시도 것입니다 .

는 또한 사용하려 :

after_create 
    reload 

    # do stuff if self.id 
end 

을하지만 작동하지 않습니다.

@PauloFidalgo처럼, after_save 메소드를 제외하고는 id를 얻을 수 없습니다. 그것은 나에게 이상한 일이지만 after_save (after_create의 저장에 의해 트리거 됨)에서 두 번째 before_save로 가져올 수 있습니다.

답변

4

idcreatesave에만 할당되며 여기에는 골격 개체를 만들고 일부 값을 지정합니다.

after_save {id = self.id} 

: 당신이 after_ * 방법에서 ID를 얻으려면 어떤 이유로, 당신은 after_save를 사용해야하는 경우

을 object.id 전화 개체의 ID를 얻으려면 create에 ID를 할당 할 수도 있지만 데이터베이스를 쿼리하고 변수의 값을 설정해야합니다. 이를 달성하기 위해서는 ID를 설정하기 위해 데이터베이스의 시퀀스를 사용해야합니다.

+0

여기 내 문제는 실제 레코드에서 일부 값을 수정해야한다는 것입니다. 그게 내가 before_save에서하고있는 이유입니다. 그러나 다른 요소에 대한 새 레코드를 연결하려면 after_create에서 ID를 가져 와서 내 물건을 사용하고 싶었습니다. 게다가 레코드를 after_save에 저장하면 무한 루프가 발생합니다. after_create가 레코드를 저장하지 않은 경우 after_create에서 호출 한 저장하기 전에 내 ID를 얻는 방법은 무엇입니까? – Incognito

+0

@Incognito 따라서 레코드를 만들거나 편집 할 때 연관을 변경하고 싶습니까? –

+0

실제로 제가 원했던 것은 단위에 연결된 일부 레코드를 복제하는 것이 었습니다. 요점은 템플릿 단위를 만들었고 사용자가 직접 만든 것이기 때문에 기본 연관을 복사한다는 것입니다. 그래서 그것을 시도한 것입니다. 하지만 self.tasks를하는 중 << Task.new (taks_to_copy.attribute)는 주 레코드가 저장 될 때 연결을 생성하지 않는 것처럼 보입니다. – Incognito