保存嵌套对象

时间:2014-04-14 18:17:04

标签: grails groovy

我的Record域类如下:

Record.groovy

Person person
Schedule schedule
String nameOfRecord

我的RecordService.groovy如下:

def saveRecord (params) {
    def personInstance = Person.get(params.record.person.id)
    def scheduleInstance = Schedule.get(params.record.schedule.id)
    def nameOfTheRecord = params.nameOfRecord

    // At this point i want to save my Record. How can i do it
    def rec = new Record(params)

    rec.save(flush: true)

}

PersonSchedule未保存在Record表格中。我怎么能保存这些?

我认为问题出在def rec = new Record(params),而我没有保存  其中scheduleInstancepersonInstance。怎么解决这个问题?

更新

<g:form controller="record" action="save">
<g:hiddenField name="record.person.id" value="${record.person.id}" />
<g:hiddenField name="record.schedule.id" value="${record.schedule.id}" />

... And other input field

2 个答案:

答案 0 :(得分:0)

  

人和日程表未保存在记录表中。我怎么能保存这些?

我认为你的意思是外键对人和日程表没有保存在记录中?如果是这样,以下内容应该有效

def saveRecord(Record record) {
    rec.save(flush: true)
}

如果这看起来很神奇,你应该阅读data binding docs,特别是#34;将请求数据绑定到模型&#34;部分。

答案 1 :(得分:0)

@Ilep我认为你要找的是一个hasOne关系: http://grails.org/doc/latest/ref/Domain%20Classes/hasOne.html 它不仅可以处理好关系,还可以处理更好的删除。如果适用,您还应该定义BelongsTo关系。

您的语法也有问题:

def personInstance = Person.get(params.record.person.id)
def scheduleInstance = Schedule.get(params.record.schedule.id)
def nameOfTheRecord = params.nameOfRecord

// At this point i want to save my Record. How can i do it
def rec = new Record(params)

应该是:

def personInstance = Person.get(params.record.person.id)
def scheduleInstance = Schedule.get(params.record.schedule.id)
def nameOfTheRecord = params.nameOfRecord

// At this point i want to save my Record. How can i do it
def rec = new Record(person: personInstance, schedule: scheduleInstance, name: nameOfTheRecord)