在我看来,如果我需要在多个地方使用动态方法(例如Domain.findByName(“name”)),那么用它定义一个变量并参考它会更好吗?而不是在多个地方拥有动态方法?我知道这似乎是一个明显的答案,但我只是想确保Grails不会缓存它或者其他内容,实际上正在进行两次数据库调用。
答案 0 :(得分:1)
默认情况下,grails只会缓存“get”请求(即Book.get(4)),如果你没有设置任何额外的缓存,你会为每个请求点击数据库(正如你所看到的) )。
有关详细信息,请参阅the 'caching queries' section of the grails documentation。
如果您只想进行一次调用(这在视图中是有意义的,因为您希望它保持一致),我会在操作中执行查询并将其传递给模型,否则您也可以在视图中使用g:set进行设置(虽然这听起来更适合控制器或服务)。
答案 1 :(得分:0)
最好将域对象作为模型的一部分发送到视图,而不是从视图中调用Domain.findByName("name")
。
所以在你想要的控制器方法中
def myAction = {
def myObject = Domain.findByName("name")
// do other stuff
[myObject: myObject]
}
然后在您的视图中,您可以通过
访问它${myObject.property}