不知有沒有人發現, 在 update action 中的處理:
{ ... if (!someInstacne.hasErrors() && someInstance.save()) { ... redirect(action: show, someInstance.id) } ... }往往在 show view 所查看到的 GORM 物件並非是剛剛 update 後的資料; 所以解決的方法是:
變更 save method 的參數: flush 為 true; 即
if (!someInstacne.hasErrors() && someInstance.save(flush: true)) { ...但是, 每每在一個 GORM 物件進行 generate-all 後, 得再加以修改該行參數, 顯然不是一個經濟的做法。
於是進行預設 templates 的修訂來達到此一目的是合乎情理的。方法如下:
1) 先安裝 plug-in
grails install-templates2) project 下, 找出預設 controller 的樣板
vi src/templates/scaffolding/Controller.groovy3) 修改...
if (! ${propertyName}.hasErrors() && ${propertyName}.save()) { ...變更為...
if (! ${propertyName}.hasErrors() && ${propertyName}.save(flush: true)) { ...4) 存檔完成
如此, 每當產生預設的 controller 之後, 都會含有此一作用; 省去為每個 controller 要加註 flush 參數。
不過 v1.3.x 版已加了上述的處理了。
沒有留言:
張貼留言