как выбрать возраст, который меньше или больше, чем выпадающий в Grails и Groovy - PullRequest
0 голосов
/ 07 июня 2011

У меня есть требование, чтобы один выпадающий список содержал некоторые условия по возрасту. менее 10 дней, от 10 до 30 дней, от 1 месяца до 3 месяцев, от 4 месяцев до 12 месяцев, от 1 года до 2 лет.

У меня есть класс домена, содержащий одно свойство age (целое число). И я вычисляю dob формы возраста до текущей даты и сохраняю в БД. У меня есть критерии поиска для поиска на основе возраста на странице поиска, так как я могу отобразить эти условия Вэйлс в раскрывающемся списке, и когда я выбираю один вариант, как отобразить результат в зависимости от возраста.

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

это мой выпадающий список, включающий все добы

 <td><span id="availableAge" ></span></td>  

Это мой скрипт для получения dobs от контроллера с помощью ajax-вызова

 function generateAge(data){
        var list ="<select style='width:100px' id='age' name='age'><option value=''>-Select-</option>";
        var opt;    
            for(var i=0; i<data.ageDetails.length; i++){
                opt = "<option value="+data.ageDetails[i].age+">";
                opt = opt+data.ageDetails[i].age;
                opt = opt+"</option>";  
                list = list+opt;                
            }           
        list = list+"</select>";
        var listObj = document.getElementById("availableAge");
        if(listObj){
            listObj.innerHTML = list;
        } 
    }

1 Ответ

4 голосов
/ 07 июня 2011

Плохая идея хранить возраст в БД, так как он постоянно меняется - лучше придерживаться DOB.

Поскольку набор опций фиксирован, создайте для него что-то вроде enum, используйте егоvalues() для рендеринга select

enum AgeCriteriaEnum { NONE, LESS_THAN_10, BETWEEN_10_AND_30, ... so on }

и просто сделайте switch() как:

AgeCriteriaEnum ageEnum = AgeCriteriaEnum.valueOf(params.ageEnum)
Date today = new Date()

Patient.withCriteria {
  switch(ageEnum) {
    case AgeCriteriaEnum.NONE: 
      break;
    case AgeCriteriaEnum.LESS_THAN_10: 
      ge('dob', today-10)
      break;
    case AgeCriteriaEnum.BETWEEN_10_AND_30: 
      lt('dob', today-10)
      ge('dob', today-30)
      break;
      //... so on
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...