2012-06-16 3 views
0

녀석의 ID를 기반으로 여러 테이블에 레코드를 추가 내가 3 개 테이블을했습니다 :첫 번째 테이블

  • 프로젝트 {ID, 이름, 소유자, ....}
  • ProjectMilestones {ID를, 나는 새 프로젝트를 만들면 PROJECT_ID는, 이름은 ....}
  • UserProjects {ID는, PROJECT_ID는 ....}

여기에, 나는 PROJECT_ID(@@ IDENTITY를 가져올 것이다) 열 및 ProjectMilestonesUserProjects 테이블에이 ID가있는 테이블에 새 행을 만듭니다. 내 코드는 다음과 같습니다.

def create 
    ActiveRecord::Base.transaction do 
    # Instantiate a new object using form parameters 
     @project = Project.new(params[:project]) 
     if @project.save 
     # if project saves, Create a new insteance into User Projects 
     @userproject=UserProject.new(
     :project_id=>@project.id 
     ) 
     @userproject.save 

     # Create a new insteance into ProjectMilestone 
     @projectmilestone=ProjectMilestone.new(
     :project_id=>@project.id, 
     :milestone_id=>12, 
     :milestone_date=>@project.created_at 
     ) 
     @projectmilestone.save 
     flash[:notice] = "A new project has been created successfully" 
     redirect_to(:action => 'list') 
     else 
     # If save fails, redisplay the form so user can fix problems 
     render('new') 
     end 
    end 
    end 

잘 처리되고 있습니다. 이것에 대해 최적화 된 접근법이 있는지 알고 싶습니다. 비즈니스 로직을 모델로 이동하고 프로젝트가 관련된 모든 레코드를 만들거나 실패하게 할 수 있습니다.

답변

1

새 프로젝트를 만든 후에 항상 새 UserProject와 새 ProjectMilestone을 만들려면 ActiveRecord-Callback 중 하나를 사용할 수 있습니다. 당신의 사업 모델에서

이 콜백을 추가 할 수 있습니다

after_create :create_other_models 

이제 방법 create_other_models에 다른 모델을 만드는 부분을 복사 할 수 있습니다.

관련 문제