Я пытаюсь использовать Grails Scaffolding, чтобы собрать быстрое приложение CRUD вокруг некоторых устаревших таблиц базы данных (см. этот предыдущий вопрос StackOverflow для саги до сих пор). Сейчас я преодолел худшую из проблем и имею работающее приложение CRUD, но осталась одна проблема с общим удобством использования.
Многие из моих доменных объектов имеют ассоциации внешних ключей с другими объектами домена. Contact
принадлежит Owner
и т. Д.
Однако на страницах CRUD для Contact
я не хочу видеть фактический ключ id
для Owner
..., потому что это ничего не значит для пользователей. Я хочу, чтобы на экране отображалось более удобное для человека значение Owner.name
.
Представления «список» и «показ» явно имеют дело со всеми атрибутами в автоматически сгенерированном коде представления, и у меня есть возможность настроить этот код для управления тем, что представлено. Однако представления «создать» и «редактировать» не перечисляют все атрибуты. Вместо этого в этих представлениях делается какой-то вызов тега Grails, подобный следующему:
...
<fieldset class="form">
<g:render template="form"/>
</fieldset>
...
Этот вызов, по-видимому, автоматически определяет во время выполнения, что такое поля, и сам принимает решение о том, как их отображать. Для доменных объектов, имеющих ассоциации, неправильное решение заключается в отображении идентификатора бессмысленного связанного объекта, а не более дружественного для человека атрибута.
Существует ли "простой" (или, по крайней мере, "лучший метод") способ изменения способа отображения полей в представлении "изменить" или "создать"? Конечно, это общая проблема, когда использование Scaffolding используется с объектами домена, имеющими ассоциации.