开发者

Problem with RichUI star rating

开发者 https://www.devze.com 2023-03-16 16:50 出处:网络
I\'m devolping a rating system with RichUI plugin for Grails. First I had the following code: class 开发者_StackOverflowRatingController {

I'm devolping a rating system with RichUI plugin for Grails. First I had the following code:

class 开发者_StackOverflowRatingController {

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)
}
}

which worked fine, but the problem with this code is that, if the user updates the rating for one artist it would always create a new Rating instance instead of just update the rating value. So I came up with the following code:

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)
}
}

But with this code, when the rating value is assigned to the new rating (params.rating) in the "else" block, it is assigned to some random number around 50's (like 53). I can not see where is the problem. A little help would be appreciated. Thanks very much.


I just found out where the problem was. I had to convert the input value of the rating to type double. So, the following code is working as it was supposed to:

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)
   }
   }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号