【问题标题】:Filter 'belongsTo' results过滤“属于”结果
【发布时间】:2014-11-24 18:22:54
【问题描述】:

我是 grails 的新手,在没有可以提出此类问题的人的情况下尝试理解它是一项艰巨的工作。 我有以下问题。这是我拥有的两个域类:PagadoraCalculo

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]
}

我想要的是以下,我想在选择中过滤,只有活跃的 Pagadoras

 <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-']" />    

对不起,如果有点难以理解我,但尝试用英语解释这样的事情对我来说有点困难(我的母语是西班牙语:P)

【问题讨论】:

  • 这并不是您的问题,但在 GSP 中嵌入这样的代码并不是一个好主意。更好的做法是在呈现视图之前执行查询(通常在控制器操作或服务方法中)并将结果放入传递给视图的模型中。

标签: grails groovy grails-orm grails-domain-class grails-controller


【解决方案1】:

如果您想获取所有处于活动状态的条目,请将from 属性更改为:

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

这是dynamic finder

Jeff 在 cmets 中指出这里的布尔参数可以省略(参见findAllBy 的示例)。如果您想获取所有非活动条目,您仍然可以通过将查找器命名为 findAllByNotActivo 来不使用该参数。当您的 finder 有两个参数,其中一个是布尔值时,这会特别方便。

【讨论】:

  • 正是我想要的。非常感谢您的帮助。
  • 您可以将其缩短为 Pagadora.findAllActivo(),而不是 Pagadora.findAllByActivo(true)。大约 4 年前,我为 Grails 1.3.2 做了一些工作。 jira.grails.org/browse/GRAILS-6277
  • @Jeff:谢谢,我是这么认为的,但我在文档中找不到。
  • 对。用户指南中没有太多关于该功能的详细描述,但有一些示例。例如,grails.org/doc/2.4.4/ref/Domain%20Classes/findAllBy.html 显示使用 Book.findAllPaperbackByAuthor("Douglas Adams")Book.findAllNotPaperbackByAuthor("Douglas Adams") 等方法。 paperback 属性是在那里处理的布尔值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2019-01-23
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多