Как получить доступ к строкам с помощью составных ключей в Grails? - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю простую CRUD для БД Oracle 12c в Grails 3 с использованием скаффолдинга, а для простых таблиц, которые имеют столбец с явным целочисленным идентификатором, как этот:

class Config {
    int id
    String name
    String type
    String value
    String description
    int status

    static constraints = {
        /* constraints constraints constraints */
    }

    static mapping = {
        sort 'name'
        version false
        id column: 'CONFIGID', name:'id', generator:'sequence', params:[sequence: 'CONFIG_SEQ']
    }
}

все работает нормально, и выможет получить доступ к представлениям скаффолдинга данной строки через автоматически сгенерированную ссылку в виде списка, а также с явным URL-адресом в виде config/<view>/<ID>, как только у меня появится таблица с составным ключом, подобным этому:

class AliasFrequencyDict implements Serializable{
    String frequency
    String unit
    String description
    String lang

    static constraints = {
        /* constraints constraints constraints */
    }

    static mapping = {
        sort 'frequency'
        version false
        id composite: ['frequency', 'unit', 'lang']
    }
}

... вы больше не можете получить доступ к строкам (или я не знаю как).Scaffolding больше не генерирует ссылки на представления в виде списка, и попытка доступа к нему через URL-адрес, такой как aliasFrequencyDict/show/0/D/PL (который будет точно /<view>/<frequency>/<unit>/<lang>, как указано в определении составного идентификатора), приводит к 404.

Как получить доступ к соответствующим страницам шоу, редактирования и т. Д. При использовании составного идентификатора?

1 Ответ

0 голосов
/ 18 февраля 2019

Как получить доступ к соответствующим страницам шоу, редактирования и т. Д. При использовании составного идентификатора?

Существует много способов сделать это.Например, для show у вас может быть отображение URL, которое выглядит примерно так ...

"/aliasFreqDict/$freq/$unit/$language"(controller: 'aliasFreqDict', action: 'show')

, а затем иметь соответствующее действие контроллера ...

class AliasFreqDictController {

    AliasFreqService aliasFreqService

    def show(String freq, String unit, String language) {
        // have a service method that looks up the instance by these properties...
        respond aliasFreqService.find(freq, unit, language)
    }
}

Iнадеюсь, что это поможет.

...