3

我需要允许用户在其中一个系统实体中定义一些自定义字段。你有什么建议/模式/插件可以帮助我将此功能添加到我的应用程序中。

谢谢,

梅尼

4

2 回答 2

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 集合、列表和映射”部分。

于 2010-08-01T17:48:17.367 回答
0

听起来您希望您的应用程序成为用户可以随意修改的无限可调扳手。这公平吗?

我不认为这是可能的或可取的。想一想当您在 Grails 中向现有域对象添加属性时会发生什么。该属性被添加到 ORM 映射中,这意味着必须修改表。UI 添加了另一个文本框用于数据输入;列表页面的表格中添加了另一列。

添加属性时会发生很多事情。您将如何管理同时修改应用程序的多个用户?当一个用户正在修改表而另一个用户正在访问旧版本时会发生什么?

你问得太多了。我不认为这是一个合理的要求。Grails 的最佳点是基于 Web 的 CRUD 应用程序的快速开发。我认为这不包括用户在运行时进行的修改。

于 2010-08-01T15:36:57.483 回答