2012-02-01 81 views
2

我已經在Grails和從控制器我試圖挽救,但沒有得到保存在數據庫中創建新域..代碼如下的Grails:保存不工作

控制器

 def register={ 
     String name = params.name 
     String email = params.email 
     String pass = params.password 
     boolean signedIn = params.signedIn 
     System.out.println(name + " " + email +" "+ pass+" " + signedIn) 
     def rUser = new Registered(params) 
     rUser.signedIn = signedIn 

     System.out.println(rUser) 
     rUser.save(flush:true) 


    } 

class Registered { 
    String name; 
    String email; 
    String password; 
    boolean signedIn =false; 


    static constraints = { 

    } 
} 

,我試圖通過這個網址,以節省

http://localhost:8080/egypths/apps/register?name=hegab&[email protected]&password=tom&signedIn=false

所以我在做什麼錯了...把記住,有一個在堆棧跟蹤中沒有錯誤

+0

保存調用後執行「println rUser.errors」時會得到什麼? – david 2012-02-01 14:55:39

回答

2

我會被啓動在集成測試包裝這一點,應該是這樣的:

import groovy.util.GroovyTestCase 
import org.junit.Test 

public class RegisterControllerTests extends GroovyTestCase { 

    @Test 
    void saveAction() { 
     def controller = new RegisterController() //or whatever the controller name is 
     controller.params.name = "SomethingUnique" 
     controller.params.email = "[email protected]" 
     controller.params.password = "password" 
     controller.params.signedIn = "false" 

     controller.register() 

     def registered = Registered.findByName("SomethingUnique") 
     assert "[email protected]" == registered.email 
     assert "password" == registered.password 
     assert false == registered.signedIn 
    } 
} 

然後我會通過使您的控制器操作儘可能的簡單啓動:

def register={ 
    String name = params.name 
    String email = params.email 
    String pass = params.password 
    boolean signedIn = params.signedIn 
    def rUser = new Registered() 
    rUser.name = name 
    rUser.email = email 
    rUser.password = pass 
    rUser.signedIn = signedIn 

    rUser.save(flush:true, failOnError:true) //I would remove the failOnError after you identify the issue. 
} 

這樣,您可以快速重複測試並找出問題所在。如果不通過驗證,將failOnError:true添加到保存調用將導致引發異常。如果這個簡單的例子開始工作,開始回到一個更優雅的解決方案來確定問題所在。

+0

爲什麼failOnError在這種情況下?您是否真的推薦錯誤500頁面,因爲用戶輸入了無效密碼或省略了他們的電子郵件? – 2012-02-01 15:01:51

+1

我會添加failOnError來試圖找出問題。我發現問題後我不會將它留在那裏(可能應該指定)。 – 2012-02-01 15:07:48

+0

我在Config.groovy中設置了'failOnError = true',但在我的代碼中,我總是在保存之前調用'validate()'。這樣我只能得到一個堆棧跟蹤意外的保存失敗。 – 2012-02-01 16:24:50