2012-11-22 69 views
2

有這種情況,我有一個模型Project,此項目有一個Image的圖庫。所以:保存與外鍵相關的模型的最佳做法

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

在一個表單中,我希望能夠將項目信息和多個圖像保存在一起。問題是,我怎樣才能得到project_id,因爲Project型號的ID是自動遞增的,我在保存模型之前無法訪問它。

我想過的一種方式是在用戶提交表單更新後,在開始時將模型保存起來。但它似乎非常討厭!

在同一表單中用HAS_MANY和BELONGS_TO關係保存模型的最佳做法是什麼?

+0

'虛擬保存在它的確定的begining'模型,虛擬模型的設置狀態,如果用戶不上傳任何圖片,你需要刪除的虛擬項目 – Sergey

+0

這是一個問題,當你有一些強制性的領域......我不想讓用戶先保存表單的某些部分,然後讓他更新休息... –

+0

如果'$ project-> save()'返回true,並且如果有任何圖片無法上傳,那麼您是否可以不保存圖片,並將其作爲錯誤添加到項目模型中? – Stu

回答

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, ...) 
} 
+0

我會試試看它是如何工作的:D –

+1

如果她將被用於標準上傳,如果瑪莎會使用像xuploadform這樣的啞模式保存必須使用。 – Sergey

+0

不要忘記檢查項目是否先保存並保存圖像。 –