Grails脚手架,带有用于外键关联的友好标签(而不是ID键)

Ste*_*ins 7 grails groovy

我试图使用Grails Scaffolding在一些遗留数据库表周围抛出一个快速的CRUD应用程序(到目前为止,请参阅此前的StackOverflow问题).我现在已经过了最糟糕的问题,并且有一个正常运行的CRUD应用程序,但是一般可用性仍存在一个问题.

我的许多域对象都与其他域对象具有外键关联.A Contact属于Owner等等

但是,在CRUD页面上Contact,我不想看到...的实际id键,Owner因为这对人类用户没有任何意义.我想要在Owner.name屏幕上显示更人性化的值.

"list"和"show"Views明确处理View自动生成的代码中的所有属性,并且我能够调整该代码来控制所呈现的内容.但是,"创建"和"编辑"视图不会列出所有属性.相反,这些视图会像这样生成某种Grails taglib调用:

...
<fieldset class="form">
    <g:render template="form"/>
</fieldset>
...
Run Code Online (Sandbox Code Playgroud)

此调用显然在运行时自动检测字段是什么,并自行决定如何显示它们.对于具有关联的域对象,它使得显示关联对象的乱码ID的错误决定而不是更人性化的属性.

是否有一种"简单"(或至少是"最佳实践")方式来更改字段在"编辑"或"创建"视图中的显示方式?当使用Scaffolding与具有关联的域对象一起使用时,这是一个常见问题.

Ste*_*ins 16

哦,呃...你可以toString()在关联的域对象上实现一个" "方法,让它返回你想用于显示目的的字段:

class Owner {

    String id  // not human-friendly
    String name  // human-friendly
    // ...etc...

    String toString() {
        return name
    }
}
Run Code Online (Sandbox Code Playgroud)

现在当你在一个CRUD View for Contact,它有一个Owner关联字段时,屏幕上显示的是Owner.name属性,而不是Owner.id或一些丑陋的对象引用.