2

このようなシナリオがあります。私にはモデルがProjectあり、このプロジェクトにはsのギャラリーがありImageます。それで:

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

プロジェクト情報と複数の画像をまとめて保存できるようにしたいと思います。問題は、モデルに自動インクリメントのIDがあり、モデルを保存する前にそのIDにアクセスできないため、どうすれば取得できるかということproject_idですProject

私が考えた1つの方法は、最初にモデルをダミー保存してから、ユーザーがフォームを送信して更新することです。しかし、それは非常に厄介なようです!

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 に答える