2014-11-24 87 views
1

即时通讯在Grails中是新的,它是一项艰巨的工作,试图理解它,而没有人可以问这类问题。 我有以下问题。这是我的两个领域类的,我有:PagadoraCalculo过滤器'belongsTo'结果

Pagadora.groovy

class Pagadora { 
    String nombre 
    Boolean activo 
    static hasMany = [calculoIMSS: Calculo, calculoPagado: Calculo, calculoConvenio: Calculo] 
    static mappedBy = [calculoIMSS: 'imss', calculoPagado:'pagadoPor', calculoConvenio:'convenio'] 
} 

布尔变量ACTIVO是指如果 “Pagadora” 将要露面该类视图的“选择列表”Calculo

Calculo.groovy

class Calculo { 
    String nombre 
    BigDecimal sueldo 
    static belongsTo = [imss:Pagadora, pagadoPor:Pagadora, convenio:Pagadora] 
} 

我要的是下面,我想在活跃

<g:select id="imss" name="imss.id" from="${Pagadora.Pagadora.list(sort: "nombre", order: "asc")}" optionKey="id" required="" value="${calculoInstance?.imss?.id}" class="many-to-one form-control" noSelection="['':'-Escoja la empresa-']" />  

很抱歉,如果这是一个很难理解我的选择,只有Pagadoras过滤,但它是一个有点困难,我试图解释在英国这样的事情(我的母语是西班牙语:P)

+0

这实际上并不是你的问题所在,但在GSP中嵌入这样的代码并不是一个好主意。更好的做法是在呈现视图(通常在控制器操作或服务方法中)之前执行查询,并将结果放入传递给视图的模型中。 – 2014-11-25 05:06:33

回答

1

如果你想获得的所有现用的项目中,from属性更改为:

from="${Pagadora.findAllByActivo(true) [sort: 'nombre', order: 'asc']}" 

这是一个dynamic finder

Jeff在评论中指出,此处的布尔参数可以省略(请参阅findAllBy的示例)。如果你想得到所有不活动的条目,你可以通过命名你的发现者findAllByNotActivo来完成。当你有两个参数,其中一个是布尔值时,这非常方便。

+0

正是我正在寻找的。非常感谢你的帮助。 – 2014-11-24 18:43:05

+1

而不是'Pagadora.findAllByActivo(true)'你可以缩短到'Pagadora.findAllActivo()'。我在大约4年前为Grails 1.3.2编写过其中的一部分。 https://jira.grails.org/browse/GRAILS-6277 – 2014-11-25 05:05:09

+0

@杰夫:谢谢,我是这么认为的,但是我在文档中遇到了问题。 – 2014-11-25 13:59:33