У меня есть категория объектов домена с hasMany относительно объекта домена атрибутовGrails: Как обрабатывать мультивыбор в контроллере с помощью лесов при хранении без выбора?
class Category {
Collection<Attribute> attributes = []
static hasMany = [attributes:Attribute]
Я использую подмости для создания мульти выбора окна (отличное от весьма похожего вопроса, указанного в this question):
class CategoryController {
static scaffold = true
}
Это визуализируется для зрения как поле выбора, такие как это:
<select id="attributes" class="many-to-many" size="5" multiple="multiple" name="attributes">
<option value="1">entry 1</option>
<option value="2">entry 2</option>
</select>
При выборе какого-либо не записи из поля выбора, при отправке формы ничего не отправляется. Таким образом, де-выбор всех записей в поле выбора не сохраняется, но вместо этого все значения, которые были сохранены до этого, остаются такими.
Я попытался добавить собственный beforeValidate
метод (смотри ниже, аналогично решению, описанному в a reply to the question mentioned above) на мой CategoryController, но из-за леса он не получает казнены (если я не ошибаюсь, и есть другая причина):
def beforeValidate() {
def categoryInstance = Category .get(params.id)
if (!categoryInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'categoryInstance.label', default: 'Category'), params.id])
redirect(action: "list")
return
}
if (!(params?.attributes)) {
categoryInstance.attributes.clear()
}
}
Я в затруднении относительно того, что теперь делать. Forego scaffolding для этого контроллера и использовать мой собственный метод beforeValidate
? Поддерживать строительные леса и внедрять метод в другом месте? Сделайте что-нибудь еще?