我要求允许用户在其中一个系统实体中定义一些自定义字段。你有任何建议/模式/插件,将帮助我将此功能添加到我的应用程序。
感谢,
Meni
答案 0 :(得分:6)
您可以将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集,列表和地图”部分。
答案 1 :(得分:0)
听起来您希望您的应用程序是一个无限可调的扳手,用户可以随意修改。那是公平的吗?
我认为这不可能或不可取。想想在Grails中向现有域对象添加属性时会发生什么。该属性将添加到ORM映射中,这意味着必须修改表。 UI添加了另一个用于数据输入的文本框;列表页面的另一列已添加到其表中。
添加属性时会发生很多事情。您将如何管理同时修改应用程序的多个用户?当一个用户正在修改表而另一个用户正在访问旧版本时会发生什么?
你问得太多了。我不认为这是一个合理的要求。 Grails的最佳选择是基于Web的CRUD应用程序的快速发展。我认为这不包括用户在运行时进行的修改。