Grails 3 переопределяет queryForResource не работает

Согласно веб-службам Grails

Я могу переопределить метод запрос для ресурса. Таким образом, я могу указать вложенный ресурс REST. например

"/authors"(resources:'author') {
    "/books"(resources:'book')
}

Но док может ошибаться. Потому что он использует оператор присваивания = вместо оператора сравнения ==.

Запуская таким образом, я получаю следующую ошибку:

((id == id) && building.id) is a binary expression, but it should be a variable expression

Меняя оператор с = на ==, я получаю еще одну ошибку

Cannot query property "params" - no such property on class clash.BuildingLevel exists

Как правильно определить этот вложенный ресурс REST?

Вот мой метод queryForResource:

Я пробовал оба:

@Override
protected BuildingLevel queryForResource(Serializable id) {
    if (params.buildingId) {
        return BuildingLevel.where {
            id == id && building.id = params.buildingId
        }.find()
    }
}


@Override
protected BuildingLevel queryForResource(Serializable id) {
    if (params.buildingId) {
        return BuildingLevel.where {
            id == id && building.id == params.buildingId
        }.find()
    }
}

person Daniel Ribeiro    schedule 25.08.2015    source источник
comment
Можете ли вы опубликовать свой метод queryForResource?   -  person Sandeep Poonia    schedule 25.08.2015
comment
Привет @SandeepPoonia. Я разместил 2 формы метода, который я пробовал безуспешно   -  person Daniel Ribeiro    schedule 25.08.2015


Ответы (1)


Я просто разбираюсь.

Следующий пост issues-posting-nested-resource-in-grails помог мне .

params не может находиться внутри предложения where. Поэтому необходимо создать локальную переменную, чтобы сохранить значение. Как это:

@Override
protected BuildingLevel queryForResource(Serializable id) {
    def myLocalVariablebuildingId = params.buildingId
    if (params.buildingId) {
        return BuildingLevel.where {
            id == id && building.id == myLocalVariablebuildingId
        }.find()
    }
}
person Daniel Ribeiro    schedule 25.08.2015