Grails:save不起作用
我已经在grails中创建了一个新域,并且从一个我试图保存的控制器中创建了一个新域,但是没有在数据库中保存任何内容。。代码如下 控制器 领域 我正试图通过这个url保存Grails:save不起作用,grails,save,Grails,Save,我已经在grails中创建了一个新域,并且从一个我试图保存的控制器中创建了一个新域,但是没有在数据库中保存任何内容。。代码如下 控制器 领域 我正试图通过这个url保存 那么我做错了什么。。。请记住堆栈跟踪中没有错误,我将首先将其包装在一个集成测试中,如下所示: import groovy.util.GroovyTestCase import org.junit.Test public class RegisterControllerTests extends GroovyTestCase
那么我做错了什么。。。请记住堆栈跟踪中没有错误,我将首先将其包装在一个集成测试中,如下所示:
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 = "example@example.com"
controller.params.password = "password"
controller.params.signedIn = "false"
controller.register()
def registered = Registered.findByName("SomethingUnique")
assert "example@example.com" == 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
添加到save调用将导致在异常未通过验证时引发异常。如果这个简单的示例有效,请重新开始寻找更优雅的解决方案,以确定问题所在。在保存调用后执行“println rUser.errors”时会得到什么?在这种情况下为什么会出现FailOneError?你真的推荐错误500页是因为用户输入了无效的密码或遗漏了他们的电子邮件吗?我会添加failOnError以试图识别问题。在发现问题后,我不会把它放在那里(可能应该指定它)。我在Config.groovy中设置了failOnError=true
,但在我的代码中,我总是在保存之前调用validate()
。这样我只会得到意外保存失败的stacktrace。脱离主题,但您也可以通过删除所有分配和使用def rUser=new Registered(params)
,进一步简化此过程,它将为您匹配属性名称并删除许多不必要的行,请参阅@Steve Yes,这将有效,而询问者之前就是这么做的。我只建议将其分解以使其工作,然后重构为更优雅的解决方案,如传递参数。
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 = "example@example.com"
controller.params.password = "password"
controller.params.signedIn = "false"
controller.register()
def registered = Registered.findByName("SomethingUnique")
assert "example@example.com" == 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.
}