2010-07-02 3 views
0

나는 belongs_to has_many 관계에있는 클러스터와 사용자가있는 레일 애플리케이션이 있습니다. cluster_controller에서 방금 ​​생성 된 객체에서 ID에 액세스하기

이 방법을 만들어 쓰기 :

@cluster = @current_user.clusters.build(params[:cluster]) 

가 지금은 몇 가지 명령 줄 스크립트를 실행하려면 :

output = `echo cluster#{@cluster.id} > /tmp/out` 

... 여기 기능

의 나머지는 또한

시도
output = `echo cluster#{@cluster.id.to_s} > /tmp/out` 

이 작업을 수행 할 때 파일에 클러스터가 있고 # 클러스터가 아닙니다. 왜 그런가요? 어떻게 수정합니까?

답변

6

build 메서드는 새 ActiveRecord 객체를 초기화하지만 데이터베이스에 유지하지 않습니다. 일반적으로 id 속성은 레코드가 저장되면 설정됩니다 (표준 자동 증가 기본 키라고 가정). build 대신 create을 사용하고 싶을 것입니다.

+0

감사합니다. 문제를 heres : 이 경우 스크립트가 실패 할 수 있으며 클러스터를 생성하지 않을 수 있습니다. 데이터베이스에서 제거해야합니까 아니면 더 좋은 방법이 있습니까? – dschatz

+0

트랜잭션에서 create를 수행 한 다음 스크립트가 실패 할 경우 트랜잭션을 롤백 할 수 있습니다. 또 다른 옵션은 id가 아닌 다른 식별 특성을 로그에 출력하는 것입니다. 이는 실제로 사용 사례에 따라 다릅니다. –

+0

클러스터를 만들 때마다 실행되는 스크립트를 실행할 때마다 고유 한 값을 제출하면됩니다. 나는 유일해야하기 때문에 이드를 선택했다. 그런 다음 어떤 이유로 든 스크립트가 실패하면 사용자를 홈 페이지 (또는 어디든)로 리디렉션하고 클러스터 생성이 실패했음을 알리십시오. 물론 이것은 데이터베이스를 변경하지 않아야합니다. – dschatz

관련 문제