好的,我想了解用於HTML和XML格式的CREATE和UPDATE方法的最佳實踐。一個控制器的默認代碼是由rails generator生成的,對我來說有點不清楚。RESTful控制器的最佳實踐CREATE和UPDATE方法
有關CREATE方法,給出了良好的保存,發電機說爲 「redirect_to的(@whatever)」 HTML和「渲染:XML => @whatever,:狀態=>:創建:位置= > @ XML「。
給定一個不好保存,發電機說要 「渲染:行動=> '新'」 爲HTML和 「渲染:XML => @ whatever.errors,:狀態=>:unprocessable_entity」 爲XML 。
但是,對於更新方法,給出一個很好的更新,發電機說要 「redirect_to的(@whatever)」 爲HTML和 「頭:OK」 爲XML。
而且,由於錯誤的更新,發電機說要 「渲染:行動=> '編輯'」 爲HTML和 「渲染:XML => @ whatever.errors,:狀態=>:unprocessable_entity」對於XML。
我明白這一點,這對我來說很有意義,而且工作得很好 - 但是,我有兩個問題:
首先,對於一個成功的創建和更新,HTML格式,爲什麼「redirect_to的(@whatever )「而不是」render:action =>'show'「?我理解重定向和渲染之間的區別,只是更加好奇你們傾向於這樣做以及爲什麼。看起來重定向對於瀏覽器來說是不必要的額外旅程。
二,爲什麼 「頭:OK」 在通過XML更新成功,但 「渲染:XML => @whatever,:狀態=>:創建:位置=> @whatever」 在成功通過CREATE XML?這對我來說似乎不一致。看起來像通過XML成功的UPDATE應該和通過XML成功的CREATE相同。看起來你需要新的/更新的對象返回,所以你可以測試它。你們怎麼做,爲什麼?
我同意你對我問題第二部分的回答。你對我的問題的第一部分的回答是有道理的,但是接下來會引出另一個問題:爲什麼在創建或更新失敗之後,出於與前面提到的相同的原因而渲染使用了而不是redirect_to?如果用戶想要將編輯或新頁面加入書籤,該怎麼辦?如果使用了渲染,那麼他們仍然會在「/ whatevers」頁面上(這是錯誤的)。 – Buddy 2010-09-03 20:32:01
如果用戶被重定向到新的/編輯操作,則所有提交的POST數據都將丟失,並且呈現的表單將爲空。你是正確的,用戶可以爲渲染的錯誤頁面添加書籤,並且它會指向錯誤的URL。沒辦法阻止這個AFAIK。 – Sidane 2010-09-04 08:30:26
哦,是的,杜。我錯誤地認爲你可以重定向到新的或編輯頁面,並傳遞一個@object。我錯了。謝謝你讓我變直! – Buddy 2010-09-05 00:03:20