Grails 瑞穗星级问题
我正在为Grails开发一个带有RichUI插件的评级系统。首先,我有以下代码: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
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
-没有太大区别,但如果您有兴趣了解其他语法,则可以使用不同的选项。:)