2012-03-09 41 views
1

假設我有以下方法。控制器創建許多項目 - 我如何創建一些不是其他項目?

def create_multiple 
    project = Project.find(params[:project]) 
    params[:tasks].each_value { |task| @tasks << @project.tasks.build(task) } 
    project.save 

    respond_with @tasks 
end 

我想過改變它改爲調用.create構建的創建任務,因爲我希望他們能夠保存,如果沒有驗證錯誤,即使其他任務失敗,因爲驗證。我很好奇別人對這個想法的看法?我也想過使用create_or_update,但我想我想鼓勵人們刪除已成功創建的項目,而不是僅僅使用相同的列表重複調用,直到創建所有項目。

有沒有更好的方法來做到這一點,所以我可以繼續調用.save一次,並讓它創建一個通過驗證並通過驗證失敗的不完全失敗的驗證。

回答

0

不確定你想要達到的目標,但是如果你想避免調用保存那些未通過驗證的驗證,那麼只需創建新任務,過濾爲有效,然後將它們附加到項目之後?

def create_multiple 
    project = Project.find(params[:project]) 

    @tasks = params[:tasks].map{ |task| Task.new(task) } 
         .select{ |task| task.valid? } 
    project.tasks = @tasks 
    project.save 

    respond_with @tasks 
end 
+0

感謝您的回覆,但這不是我要求的。我試圖轉換這個,所以我只撥打.save一次。 – Altonymous 2012-03-16 14:49:56