Ruby 根据第一个表的ID在多个表中添加一条记录
伙计们,我有3张桌子,如下所示:Ruby 根据第一个表的ID在多个表中添加一条记录,ruby,ruby-on-rails-3,activerecord,model,controller,Ruby,Ruby On Rails 3,Activerecord,Model,Controller,伙计们,我有3张桌子,如下所示: 项目{id,名称,所有者,…} 项目里程碑{id,project_id,name…} 用户项目{id,project_id,…} 在这里,创建一个新项目后,我将获取项目ID(@@IDENTITY)列,并使用此ID在项目里程碑和用户项目表中创建一个新行。我的代码如下所示 def create ActiveRecord::Base.transaction do # Instantiate a new object using form param
- 项目{id,名称,所有者,…}
- 项目里程碑{id,project_id,name…}
- 用户项目{id,project_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
这对我来说很好。我想知道是否有任何优化的方法可用于此?因此,我可以将业务逻辑移动到模型中,并让Project创建所有关联的记录,否则将失败。如果您总是希望在创建新项目后创建新的UserProject和新的ProjectMilestone,则可以使用其中一个ActiveRecord回调 在项目模型中,可以添加以下回调:
after_create :create_other_models
现在,您可以在“创建其他模型”方法中复制用于创建其他模型的零件