不知有沒有人發現, 在 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 版已加了上述的處理了。
沒有留言:
張貼留言