首页 > 解决方案 > Grails:我在哪里处理可以有两种不同表示的域类属性?

问题描述

我正在编写一种基于用户输入显示从 MySQL 数据库获得的产品的方法。我的产品有一个属性(大小),它可以由字符串、大小类型的对象(另一个包含三个浮点值的域类)表示,也可以一起丢失。目前,我的 Product-Class 对每个表示都有一个属性,这两个属性都可以为空。在我看来,我有一个特定的地方应该显示这个属性。现在我的问题是,我在哪里处理确定我对特定对象具有哪种表示的问题?

我可以在我的 gsp 模板中包含一个 if 条件,但这似乎是不好的做法。我将能够让执行查询的服务处理结果并构建单个大小属性以传递给模板,但这似乎也不正确。我的数据库设计有问题吗?我必须更改我的域模型吗?

对于这个非常笼统的问题,我很抱歉,一旦我知道我需要在哪里改变某些东西,我肯定可以改变它。已经非常感谢了!

标签: mysqlgrailsgroovygrails-orm

解决方案


解决您的问题的一种方法是使用一个额外的临时字段,该字段将在您的视图中使用,但不会保留在您的数据库中。

class Product {
    String sizeString
    Size sizeSize

    getSize() { sizeString ?: sizeSize.toString() }

    static transients = ['size']
}

推荐阅读