鉴于以下
class MyDomain {
enum State {
PRIMORDIAL,
INITIAL,
EXTENDED,
TERMINAL
}
State state
}
我希望保留“状态”属性,以便:
如何做到这一点?
谢谢
最佳答案
很确定答案是......不是很容易。枚举当前仅在数据库中存储 1 个值,因此如果您想要数据库中的字符串,那么这是唯一需要针对其发出 ORDER BY 的数据。也就是说...一旦将数据加载到 Gorm 域对象中,您就可以对其进行排序,但这不会使您的分页正确(如果您需要的话)。
您可以创建自己的类似枚举的类来包含订单和字符串,并将其映射到表中的两个字段,然后根据需要按一个或另一个排序。我经常用我所说的“可能值”或“菜单值”来做这件事;就像是:
class MenuValue {
String text
String description // used for mouseover, or some such
int sort_order
String group // used to retrieve all values for a menu/pulldown, etc.
}
然后,我通常将代码放入我的 Fixtures 中,以便在测试等需要时创建菜单选项。
与枚举相比,它的好处是能够使用管理员类型的 crud 屏幕动态更改菜单/选择的内容。您仍然可以通过以下方式“迭代”它们,就像枚举一样:
MenuValue.findAllByGroup( "groupname" ).sort { it.sort_order }.each { it -> iteration code }
所以,如果你有一个类,有人必须从菜单中选择,你可以这样做:
class SomeObject {
String something
MenuValue selectedValue
}
您可以检索所有 SomeObjects,按 MenuValue 的 sort_value 排序,例如:
params.sort = "selectedValue.sort_order"
params.order = "asc"
SomeObject.findAllBySomethingLike( search_term, params )
在编辑 SomeObject 期间,您可以选择带有可能值列表的选择,并将该选择的名称设置为“selectedValue.id”,Grails 将在数据绑定(bind)期间自动填充 SomeObject 中的 selectedValue 字段,并引用选定的菜单值。
希望这会有所帮助
关于grails - GORM : setting an ordering on enum values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26076696/