Я создаю систему рейтинга с плагином RichUI для Grails. Сначала у меня был следующий код:
class RatingController {
def springSecurityService
static scaffold = true
def rate = {
def rating = params.rating
def artist = Artist.get( params.id )
def currentUser = currentUser()
currentUser.addToRatings(new Rating(artist:artist, rating:rating)).save()
render(template: "/artist/rate", model: [artist: artist, rating: rating])
}
private currentUser(){
return User.get(springSecurityService.principal.id)
}
}
, который работал нормально, но проблема с этим кодом заключается в том, что если пользователь обновляет оценку для одного исполнителя, он всегда будет создавать новый экземпляр рейтинга, а не просто обновлять значение рейтинга.
Поэтому я придумал следующий код:
class RatingController {
def springSecurityService
static scaffold = true
def rate = {
def rating = params.rating
def artist = Artist.get( params.id )
def currentUser = currentUser()
if(! currentUser.ratings.artist.contains(artist)){
currentUser.addToRatings(new Rating(artist:artist, rating:rating)).save()
render(template: "/artist/rate", model: [artist: artist, rating: rating])
}
else{
currentUser.ratings.find{it.artist==artist}.rating = rating
currentUser.save()
render(template: "/artist/rate", model: [artist: artist, rating: rating])
}
}
private currentUser(){
return User.get(springSecurityService.principal.id)
}
}
Но с помощью этого кода, когда значение рейтинга присваивается новому рейтингу (params.rating) в блоке «else», оно присваивается некоторому случайному числу около 50-х (например, 53). Я не вижу, где проблема.
Небольшая помощь будет оценена.
Большое спасибо.