2011-07-01 12 views
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のように)。私はどこに問題があるかはわかりません。 少しの助けをいただければ幸いです。 ありがとうございました。

答えて

2

私は問題がどこにあるかを知りました。評価の入力値を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) 
    } 
    } 
+0

FWIW、それを行うには、「groovier」の方法は、 'DEF評価= Double'としてparams.rating次のようになります。それがになっていたように、次のコードは動作していますあなたが代替構文を知ることに興味があるならば。 :) –

関連する問題