2012-06-16 3 views
0

Guys У меня 3 таблицы следующим образом:Добавить запись во многих таблицах на основе ID первой таблицы

  • Project {идентификатор, имя, владелец, ....}
  • ProjectMilestones {идентификатор, project_id, имя ....}
  • UserProjects {идентификатор, project_id, ....}

Здесь Когда я создаю новый проект, я схожу с pROJECT_ID(@@ IDENTITY) и Создать новую строку как в ProjectMilestones и UserProjects таблицы с этим 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-Callbacks.

В вашем проекте-модели вы можете добавить эту функцию обратного вызова:

after_create :create_other_models 

Теперь вы можете скопировать часть для создания других моделей в методе create_other_models.

Смежные вопросы