向 Grails 域类添加字段?

Posted

技术标签:

【中文标题】向 Grails 域类添加字段?【英文标题】:Add a field to a Grails Domain Class? 【发布时间】:2010-10-13 12:12:42 【问题描述】:

我想向现有域类添加一个字段。我不想丢失我的视图文件,但是我知道如果我运行 generate-all 就会发生。还有其他方法可以更新映射等吗?

【问题讨论】:

【参考方案1】:

我认为这是一个普遍的问题。

这不是您问题的直接解决方案,但这是我所做的并且对我来说非常有效。

    我从不直接修改 grails 脚手架构件(视图和控制器)

    我将生产视图/控制器与脚手架工件分开;通过我使用脚手架作为我的应用程序控制器和视图的起点。

    如果域模型发生更改,我会重新生成视图并从脚手架工件复制粘贴(尽可能)到手工编码的工件。

    有时,我要么从应用程序中删除所有搭建的工件,要么只保护对它们的访问。

希望这会有所帮助。

【讨论】:

如何命名您的自定义视图/控制器?看来您必须偏离 grails 命名约定才能使其正常工作。这是一个常见的问题,一个好的解决方案会很棒。 视图和控制器的命名是根据应用需求来完成的。例如,在最近的一个应用程序中,有 50 个域类,应用程序界面有 5 个主菜单(主页、联系人、日历等)。所以,我的控制器是 HomeController、ContactsController 等等。【参考方案2】:

有几种方法可以做到这一点。

    如果您没有过多地修改生成的视图并且正在使用版本控制,您可以允许 grails 覆盖您的视图,然后将新模板的更改与版本控制中的内容合并。

    如果您修改了生成的视图,您只需对覆盖视图的提示回答否即可。如果您只是添加新字段、更改字段名称或类似的简单操作,则手动修改视图模板应该非常简单。

您将以相同的方式处理对控制器的任何可能更改。

【讨论】:

【参考方案3】:

只要声明它:

class MyDomain 
    String newField;

应该是你需要做的所有事情。

【讨论】:

这将覆盖他们不想要的现有视图。【参考方案4】:

不要重新生成视图,只需将另一个类似的字段复制并粘贴到您要放入所需视图中的字段。

【讨论】:

以上是关于向 Grails 域类添加字段?的主要内容,如果未能解决你的问题,请参考以下文章

更新 Grails 中父域类中的“lastUpdated”字段

grails域类中的时间字段

Grails:将自定义约束应用于域类的所有字段

Grails:将枚举类型的mysql字段映射到域类

Grails,Field 的域类默认值

在 Grails 域类中设置日期字段的默认值