我有两个域类。一个是:
class User {
String login
String password
String firstName
String lastName
String address
String email
static constraints = {
login blank:false, size:5..15,matches:/[\S]+/, unique:true
password blank:false, size:5..15,matches:/[\S]+/
firstName blank:false
lastName blank:false
email email: true
}
}
其他是
class AddWebsite {
String website
User user
static constraints = {
website blank:false
website(unique: ['user'])
}
}
我在后端使用MongoDB。我需要对于特定的登录值,所有siteURL值都应该是唯一的。例如:login = abc@gmail.com。然后,此用户只能在数据库中拥有所有唯一URL。但是对于不同的用户可以存在相同的URL。如何使用唯一约束或任何其他方法来做到这一点?
答案 0 :(得分:1)
在这种情况下,您应该能够在AddWebsite
域类上设置唯一约束,例如:
class AddWebsite {
String website
User user
static constraints = {
website(blank:false, unique: ['user'])
}
}
这将确保每个网站在每个用户的数据库中都是唯一的。请注意,多个约束将应用于属性网站。
已修改以匹配更新的问题。
答案 1 :(得分:1)
使用嵌入式子文档在SiteURL
内存储User
个实例。然后,您将集合定义为Set,这可确保其所有条目都是唯一的。如果要使用默认的mongo集合类型或想要保留顺序,请定义一个拦截器,如:
def beforeSave = {
urls = urls.unique()
}
更新:
如果您的网址是纯字符串,请使用默认的原始集合(无hasMany
):
class User {
String login
//...
Set urls = new HashSet()
}
答案 2 :(得分:0)
终于奏效了。虽然它没有在AddWebsite域类中验证,但我在进入网站时得到的用户不能出现null错误。我做了以下更改并开始工作:
class AddWebsite{
String website
User user
static belongsTo = [user: User]
static constraints = {
website( url:true, unique: ['user'])
}
}
在我的控制器中,我还将用户对象的值设置为会话变量:
def addWebsites() {
if(request.method == 'POST') {
def w = new AddWebsite()
w.properties[
'website'
] = params
w.user = session["user"] //modified to make it work
if(w.save()) {
render view:'addWebsites', model:[message: "Successfully saved"]
}
else {
return [addWebsite:w]
}
}
希望它可以帮助某人:)