grails中的过滤结果字段

grails中的过滤结果字段,grails,foreign-keys,Grails,Foreign Keys,您好,我是Grails新手,希望了解如何在Grails中过滤两个字段的结果。我应该在视图中执行,还是应该在域类中执行?我该怎么做 在以下示例中,我有3个类: 国家 陈述 地址 字段状态应仅显示基于国家/地区的筛选结果。此时将显示State对象中的所有状态。下面的屏幕截图描述了此问题 以下是我的代码 class Country { static constraints = { } String countryName static hasMany = [s

您好,我是Grails新手,希望了解如何在Grails中过滤两个字段的结果。我应该在视图中执行,还是应该在域类中执行?我该怎么做

在以下示例中,我有3个类:

  • 国家

  • 陈述

  • 地址

  • 字段状态应仅显示基于国家/地区的筛选结果。此时将显示State对象中的所有状态。下面的屏幕截图描述了此问题

    以下是我的代码

    class Country {
    
        static constraints = {
        }
    
        String  countryName
        static  hasMany = [state : State ]
    
    }
    
    class State {
    
        static constraints = {
        }
    
        String  stateName
        static  belongsTo = [ country : Country ]
    
    }
    
    class Address {
    
        static constraints = {
        }
    
        String  line1
        String  line2
        Country country
        State   state
    
    }
    

    感谢您的帮助。非常感谢你

    你在使用脚手架吗

    如果是这样,Grails将呈现所有适当的表单控件,除非您排除它们,例如

    static constraints = {
       country display:false
    }
    
    然而,我不认为你需要把国家和地址联系起来,因为地址和州之间有联系,而州也有联系,所以地址和国家之间的联系在选择州后是隐含的

    编辑1

    如果你想保持目前的模式,你可能不得不离开脚手架,自己实施行动和普惠制

    控制器:

    def create() {
        def states
        if ( params.country ) {
            states = State.findByCountry(params.country)
        }
        [countries: Country.all, states: states]
    }
    
    普惠制:

    
    

    以上内容应视为伪代码,以提供可能的解决方案

    谢谢Mike!你说的地址和国家之间的联系是对的。地址和国家/地区之间的关联隐含在State中。但是,为了使选择更方便用户(世界上可能有数千个州),如何仅显示用户选择的国家/地区的状态?这将大大减少用户的选择。再次感谢您的帮助。更新了答案,详细介绍了保持当前型号的可能方法。谢谢您,迈克!非常感谢你的帮助@YSL如果答案有帮助,你能接受它或投票吗,
    <g:select class="form-control" 
        name="country"
        from="${countries}"
        optionKey="${it}"
        value="${params.country}"
        required="required"
        onchange="submit()"
        noSelection="['':'Select country']" />
    
    <g:if test="${params.country}">
        <g:select class="form-control" 
            name="state"
            from="${states}"
            optionKey="${it}"
            value="${params.state}"
            required="required"
            noSelection="['':'Select state']" />
    </g:if>