根据First表的ID在许多表中添加记录

时间:2012-06-16 09:13:29

标签: ruby ruby-on-rails-3 activerecord model controller

伙计我有3张表如下:

  • 项目{id,name,owner,....}
  • ProjectMilestones {id,project_id,name ....}
  • UserProjects {id,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

这对我来说很好。我想知道有没有可用的优化方法?所以我可以将业务逻辑移动到Model并让Project创建所有相关记录或失败

1 个答案:

答案 0 :(得分:1)

如果您始终想在创建新项目后创建新的UserProject和新的ProjectMilestone,则可以使用其中一个ActiveRecord-Callbacks。

在您的项目模型中,您可以添加此回调:

after_create :create_other_models

您现在可以在方法create_other_models中复制用于创建其他模型的零件。

相关问题