如何在where闭包中引用隐式参数

时间:2014-09-18 16:17:08

标签: grails gorm implicit-parameters

如何在where闭包内使用隐式参数?

我对目前的解决方法并不感到特别自豪:

def index() {
    def params = params                 // <-- UGLY HACK
    respond Project.where {
        if (params.sender) {
            sender.id == params.sender  // <-- OTHERWISE THIS WOULD FAIL
        }
    }
}

另外我注意到我可以通过在闭包中放置泛型Groovy代码来参数化查询,例如上面的if。奇怪的是,即使没有黑客,条件内的params也不会造成任何麻烦。这种做法行之有效还是不鼓励?

1 个答案:

答案 0 :(得分:0)

你可以先得到sender

def thesender = Sender.get(params.sender)

然后将其作为标准传递给where关闭:

Project.where { sender == thesender }

你得到这样的东西:

def index() {
    def thesender = Sender.get(params.sender)

    respond Project.where { sender == thesender }
}