Grails - проверьте, есть ли у элемента родитель - PullRequest
1 голос
/ 27 января 2010

Я новичок в Grails, Groovy и GSP.

У меня есть класс домена "ProductCategory".

class ProductCategory {

    static constraints = {
    }

    static mapping = {
        table 'product_category';
        version false;
        cache usage: 'read-only';
        columns {
            parent column: 'parentid';
            procedure column: 'procid';
        }

    }

    static hasMany = [children:ProductCategory];

    ProductProcedure procedure;
    Integer lineorder;
    String name;
    ProductCategory parent;
    String templatelink;
    char offline;

    String toString() {
        return id + " (" + name + ")";
    }
}

Каждая категория МОЖЕТ иметь родителя. Я использую существующую базу данных, и в таблице есть столбец «парентид», чтобы сделать это. Если у категории нет родителя (корневой уровень), ее парентид равен 0.

У меня есть GSP, пытающийся показать данные о родителе, если таковые имеются.

<g:if test="${category.parent}">
hello
</g:if>

У меня сложилось впечатление, что это станет проверкой на существование. Это прекрасно работает, если у категории есть родитель, но как только parentid = 0, она взрывается.

No row with the given identifier exists: [ProductCategory#0]

Я пытался проверить на == 0, но это не сработало, я полагаю, потому что «родитель» должен быть объектом.

Так как я могу сделать так, чтобы предполагать, что parentid = 0 совпадает с parent = null или NO parent?

Спасибо

Ответы [ 3 ]

1 голос
/ 27 января 2010

Я думаю, что, возможно, нашел ответ:

parent column: 'parentid', ignoreNotFound: true;

ignoreNotFound отсутствует в документации, но, похоже, работает!

0 голосов
/ 27 января 2010

Вам не нужно обращаться с парентидой вручную. Как только вы определите класс домена следующим образом:

Class Foo {
    Bar bar
}

Gorm / Grails автоматически создаст для вас столбец внешнего ключа. И если вы определите свойство nullable:

Class Foo {
     Bar bar
     static constraints = {
         bar(nullable:true)
     }
}

... вы можете просто установить его на нуль и проверить на ноль:

def f = new Foo(bar:null)
if (f.bar == null) { ... }
0 голосов
/ 27 января 2010

parentid не должно быть равно 0. Оно должно быть null.

Что я не понимаю в вашем вопросе: как вы можете иметь парентид == 0?

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