1
GrailsのRichUIプラグインで評価システムを開発しています。まず私は、次のコードを持っていた:RichUIの星評価で問題が発生しました
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)に割り当てられているときに、このコードで、それはいくつかのランダムに割り当てられています50の周りの数(53のように)。私はどこに問題があるかはわかりません。 少しの助けをいただければ幸いです。 ありがとうございました。
FWIW、それを行うには、「groovier」の方法は、 'DEF評価= Double'としてparams.rating次のようになります。それがになっていたように、次のコードは動作していますあなたが代替構文を知ることに興味があるならば。 :) –