我想添加对User类的订阅,我是通过调用“addTo”方法来实现的,这是我的代码:
if (params.jobs == "on") {
user.addToSubscriptions(Category.findWhere(id: 1L))
} else {
user.removeFromSubscriptions(Category.findWhere(id: 1L))
}
“params”来自复选框,用户可以通过设置复选框来订阅类别。提交表单时会调用上面的代码。什么不起作用的是当用户更改超过1个类别时,请使用不同的params.x来考虑与上面相同的代码,如下所示
if (params.offers == "on") {
Category cat = Category.get(2)
if (!user.subscriptions.contains(cat))
user.addToSubscriptions(Category.findWhere(id: 2L))//needs long variable
} else {
user.removeFromSubscriptions(Category.findWhere(id: 2L))
}
只有代码中的第一个类别被添加和删除,所有其他类别抛出以下异常:
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
编辑: 抛出异常的那一行就是这一点,对我来说毫无意义:(
编辑: 当我想添加一个类别时,会抛出异常,已经添加了它,它也没有被删除。 (这仅适用于代码中未首先处理的类别,不要问我原因)
//reload page
redirect(action: "userSettings")
我该怎么办?请帮忙! 非常感谢!丹尼尔
答案 0 :(得分:2)
您是否可能尝试删除与用户无关的类别? 就像你知道的......用户没有id = 2的类别,他发送了params.offers ==“off”?
也许你应该这样做:
if (params.jobs == "on") {
user.addToSubscriptions(Category.findWhere(id: 1L))
} else {
Category cat = Category.get(2L)
if (user.subscriptions.contains(cat)) {
user.removeFromSubscriptions(cat)
}
}
几点提示: 如果您有id,请不要使用:
Category.findWhere(id:1L)
但:
Category.get(1L)
在您粘贴的行上抛出错误,因为它可能是您控制器的最后一行,因此在此行之后您将提交错误的事务处理。
尝试将此代码添加到您的控制器:
user.save()
user.errors?.allErrors?.each { println it }
这将打印保存期间发生的所有错误。