Граальс не спасет, но не будет ошибок - PullRequest
3 голосов
/ 30 ноября 2010

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

// page 52 Bankruptcy Questions 
class FamilyLawFinancial{

    Date dateOfTheOrder ;
    boolean isPartyToFamilyLawProperty = false; 
    boolean isCurrentlyInvolvedInFamilyLawProperty = false;
    boolean isBecomeInvolvedInProceedings = false;

    static belongsTo=[person:Person];

    static constraints = {
        dateOfTheOrder(nullable:true);
        isPartyToFamilyLawProperty(nullable:false);
        isCurrentlyInvolvedInFamilyLawProperty(nullable:false);
        isBecomeInvolvedInProceedings(nullable:false);
    }

    String toString(){
        "${id}"
    }
}

и вот контроллер, который сохраняет данные:

    def save = {
    def person = Person.get(session.curperson.id);
    def obj = FamilyLawFinancial.findByPerson(person);
    if(obj == null){
        obj = new FamilyLawFinancial();
        obj.person = person ; 
    }
    params.dateOfTheOrder = myutil.formatDate(params.dateOfTheOrder);
    obj.properties = params;

    println(obj.hasErrors());
    println(obj.dateOfTheOrder);
    if(obj.hasErrors() && !obj.save(flush:true)){
        println("errors: ${obj.errors}");
        flash.message = "error found";
        println("save familyLawFinancial errors: ${errors}");
    }else{
        flash.message = "saved ";
    }
    redirect(controller:'frontPage', action:'index'); return ;
}

obj.hasErrors () выдает false (это означает отсутствие ошибок), но не сохраняет в базу данных. Есть идеи, как это отладить?

ps: myutil.formatDate () -> для преобразования строки даты, например 19/11/2010, в Date ()

1 Ответ

6 голосов
/ 30 ноября 2010
if(obj.hasErrors() && !obj.save(flush:true)){

Условие после && не будет оцениваться, если условие до оценивается как false.

Поскольку false && true оценивается как false, оценка второго условия будет неэффективной с точки зрения языка.

В конце концов, в этом случае obj.save(..) никогда не вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...