0

みんな私は次のように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

それは私にとってはうまくいっています。これに利用できる最適化されたアプローチはありますか?したがって、ビジネスロジックをモデルに移動して、プロジェクトに関連するすべてのレコードを作成させるか、失敗させることができます

4

1 に答える 1

1

新しいプロジェクトを作成した後、常に新しいUserProjectとProjectMilestoneを作成する場合は、ActiveRecord-Callbacksのいずれかを使用できます。

Project-Modelで、次のコールバックを追加できます。

after_create :create_other_models

これで、メソッドcreate_other_modelsで他のモデルを作成するためのパーツをコピーできます。

于 2012-06-16T09:24:31.167 に答える