2012-02-01 79 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