2

有这样一个场景,我有一个模型Project,这个项目有一个画廊Image。所以:

Project HAS_MANY Image
Image BELONGS_TO Project -> Foreign key: project_id

在一个表单中,我希望能够将项目信息和多个图像一起保存。问题是我怎样才能得到,project_id因为模型Project有一个自动递增的 id,在保存模型之前我无法访问它。

我想到的一种方法是在开始时虚拟保存模型,然后在用户提交更新它的表单之后。但是好像很恶心!

以相同形式保存具有 HAS_MANY 和 BELONGS_TO 关系的模型的最佳实践是什么?

4

1 回答 1

2

对我来说,最好的解决方案是扩展activerecord-relation-behavior。该扩展将处理所有的 HAS_MANY 和 MANY_MANY 关系。

由于它是一种行为,因此它将处理您需要父模型的 id 以将其分配给子模型的部分。所以而不是做

//save to get the id
if($project->save()) {
    foreach($images as $image) {
        $image->project_id = $project->id;
        if(!$image->save()) {
            //Handle the errors        
        }
    }
}

您只需要做:

$project->images = $images;
if($project->save()) {
    //do what you have to do (redirection, render, ...)
}
于 2012-11-22T10:44:15.767 回答