Grails 瑞穗星级问题

Grails 瑞穗星级问题,grails,grails-plugin,Grails,Grails Plugin,我正在为Grails开发一个带有RichUI插件的评级系统。首先,我有以下代码: class RatingController { def springSecurityService static scaffold = true def rate = { def rating = params.rating def artist = Artist.get( params.id ) def currentUser = currentUser() curren

我正在为Grails开发一个带有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)
}
}
这很好,但是这段代码的问题是,如果用户更新某个艺术家的评级,它总是会创建一个新的评级实例,而不仅仅是更新评级值。 所以我想出了以下代码:

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)
}
}
但使用此代码,当评级值被分配给“else”块中的新评级(params.rating)时,它被分配给50左右的随机数(如53)。我看不出问题出在哪里。 如果你能帮我一点忙,我将不胜感激。
非常感谢。

我刚找到问题所在。我必须将评级的输入值转换为double类型。因此,以下代码按预期工作:

class RatingController {

    def springSecurityService

    static scaffold = true

    def rate = {
        def rating = params.rating.toDouble()
        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)
   }
   }
FWIW,一种“groovier”的方法是
def rating=params.rating as Double
-没有太大区别,但如果您有兴趣了解其他语法,则可以使用不同的选项。:)