【发布时间】:2010-08-01 15:08:11
【问题描述】:
我需要允许用户在其中一个系统实体中定义一些自定义字段。你有什么建议/模式/插件可以帮助我将此功能添加到我的应用程序中。
谢谢,
男人
【问题讨论】:
标签: grails grails-domain-class
我需要允许用户在其中一个系统实体中定义一些自定义字段。你有什么建议/模式/插件可以帮助我将此功能添加到我的应用程序中。
谢谢,
男人
【问题讨论】:
标签: grails grails-domain-class
您可以将 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 应用程序的快速开发。我认为这不包括用户在运行时进行的修改。
【讨论】: