伙计我有3张表如下:
在这里,创建新项目后,我将获取 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创建所有相关记录或失败
答案 0 :(得分:1)
如果您始终想在创建新项目后创建新的UserProject和新的ProjectMilestone,则可以使用其中一个ActiveRecord-Callbacks。
在您的项目模型中,您可以添加此回调:
after_create :create_other_models
您现在可以在方法create_other_models中复制用于创建其他模型的零件。