Grails connect database fields

Refresh

November 2018

Views

46 time

3

I'm trying to learn Grails but am still pretty much on beginner level. I made a tiny application, where you can basically add events, and people can write reviews about them and rate them. So I have an eventController and reviewController. The rating is just an Integer in a review. But now I want to show an overall rating for an event. So the events rating should be the average value of the corresponding ratings value.

This is my event domain code where the rating is initially set, I left out the constraints and toString:

class Event {
Double dRating = 2

static hasMany = [ratings:Rating]

}

The controller is simply:

class EventController {

def scaffold = Event
}

The rating domain file:

class Rating {
   String comment
   java.util.Date date = new java.util.Date()
   Integer rating
   Event event
}

and the Rating Controller is:

class RatingController {
    def scaffold = Rating
}

Hope I didn't make mistakes, I had to translate variable names so they're understandable.

I'm guessing that where dRating is set, I could somehow add some calculation, but I don't even know how to access the values of the rating, and everything I try ends in lots of errors and having to restart the app again and again. I tried adding calculations in the controller, but there I don't know how to get the value into the database. So where do I actually put the logic, and how do I access the values?

If any other file is important, please tell me.

Hoping to get some hints on how to start doing this, I didn't think it would be this hard.

1 answers

1

Сначала я бы рекомендовал начать чтение Grails док. Позже из вашего вопроса, это не очень понятно, что вы спрашиваете может быть несколько мест или возможности установки значения в поле домена и сохраняются его в базу данных. Я говорю все эти, которые мне известны:

  1. Если обобщенный расчет, который должен быть применен к вашей области dRating, а затем создать сеттер со стандартной конвенцией боба имен и сделать это там. Например, вы хотите, чтобы найти процент от скажем 1000, а затем добавить его в dRating

    class Event {
    
     static hasMany = [ratings:Rating]
    
      Double dRating 
    
      void setDRating(Double value){
      this.dRating  = value * 100/1000 // alternatively value /10
     }
    }
    
  2. Делайте это в commandObject : Если вы не хотите ставить определенные расчеты и проверки в области затем поместить их в командных объектах. Смотрите это . Вы можете в любой момент времени , присвоить значения из объекта команды для объекта домена, .properties механизма связывания. Например,

        yourDomainObject.properties = yourcommandObjectObject.properties
    

    Помните, свойство, имеющее такое же имя будет переплетено.

  3. Делайте это в сервисе : Вы можете сделать свои расчеты в методе обслуживания, внедрить эту услугу в ваш контроллер и вызвать этот метод для выполнения вычислений и даже сохраняются в БД , а также. Запомните услуги по умолчанию транзакционного.

Надеюсь, поможет!