我需要允许用户在其中一个系统实体中定义一些自定义字段。你有什么建议/模式/插件可以帮助我将此功能添加到我的应用程序中。
谢谢,
梅尼
您可以将 Map 属性添加到您的域类并在那里存储任意数据。不过还是比较有限的。它将生成一个包含 varchar(255) 键和值的表,因此您需要自己管理任何类型转换,例如
class Thing {
String name
Map extraProperties = [:]
}
int age = 123
def thing = new Thing(name: 'whatever')
thing.extraProperties.age = age.toString()
thing.save()
...
def thing = Thing.get(thingId)
int age = thing.extraProperties.age.toInteger()
有关简短的在线文档,请参见http://grails.org/doc/latest/上的“5.2.4 集合、列表和映射”部分。
听起来您希望您的应用程序成为用户可以随意修改的无限可调扳手。这公平吗?
我不认为这是可能的或可取的。想一想当您在 Grails 中向现有域对象添加属性时会发生什么。该属性被添加到 ORM 映射中,这意味着必须修改表。UI 添加了另一个文本框用于数据输入;列表页面的表格中添加了另一列。
添加属性时会发生很多事情。您将如何管理同时修改应用程序的多个用户?当一个用户正在修改表而另一个用户正在访问旧版本时会发生什么?
你问得太多了。我不认为这是一个合理的要求。Grails 的最佳点是基于 Web 的 CRUD 应用程序的快速开发。我认为这不包括用户在运行时进行的修改。