grails - RichUI星级评定存在问题

标签 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()

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

效果很好,但是此代码的问题在于,如果用户更新一位艺术家的评级,它将始终创建一个新的Rating实例,而不仅仅是更新评级值。
所以我想出了以下代码:
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)
   }
   }

关于grails - RichUI星级评定存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6554168/

相关文章:

grails - 在Grails中使用DomainClassPropertyComparator

grails - 为 Grails 邮件插件生成 HTML 邮件模板的最佳方法是什么?

oracle - 将 "expected"Oracle 异常返回到 Java Groovy/Grails 的最佳方法

grails - Grails View 中的名称值对

grails - 创建唯一的可选一对一关系

grails - Grails-更少的CSS @import问题

grails - 连接到Grails应用程序数据库

spring - Grails Spring Security 插件和 dbconsole

grails - Grails Acegi:更新用户名

javascript - SSE失败:使用事件推送插件在grails中注册事件监听器后出现问题