gpt4 book ai didi

grails - removeFrom* 不工作且没有错误

转载 作者:行者123 更新时间:2023-12-04 17:13:20 25 4
gpt4 key购买 nike

我有一个我认为很简单的问题,但一直无法解决...
出于某种原因,我有一个使用 removeFrom*.save() 的 Controller ,它不会引发任何错误但不执行任何操作。

运行
chalice 1.2
Linux/Ubuntu

以下应用程序被剥离以重现问题...

我通过 create-domain-class 有两个域对象
- 工作(有很多笔记)
- 注意(属于工作)

我通过 create-controller 有 3 个 Controller
- JobController(运行脚手架)
- NoteController(运行脚手架)
- JSONNoteController

JSONNoteController 有一个主要的方法 deleteItem,旨在移除/删除笔记。

它执行以下操作

  • 一些请求验证
  • 从作业中删除注释 - jobInstance.removeFromNotes(noteInstance).save()
  • 删除笔记 - noteInstance.delete()
  • 将状态和剩余数据集作为 json 响应返回。

  • 当我运行此请求时 - 我没有收到任何错误,但似乎 jobInstance.removeFromNotes(noteInstance).save() 什么也不做,也没有抛出任何异常等。
    我怎样才能追踪为什么?

    我附上了一个示例应用程序,它通过 BootStrap.groovy 添加了一些数据。
    只需运行它 - 您可以通过默认的脚手架 View 查看数据。

    如果您运行 linux,则可以从命令行运行以下命令
    获取“ http://localhost:8080/gespm/JSONNote/deleteItem?job.id=1&note.id=2

    你可以一遍又一遍地运行它,没有什么不同的发生。如果您正在运行 Windows,您还可以将 URL 粘贴到您的网络浏览器中。

    请帮忙 - 我被卡住了!!!
    代码在这里 link text

    注释域
    package beachit

    class Note
    {

    Date dateCreated
    Date lastUpdated

    String note

    static belongsTo = Job

    static constraints =
    {
    }

    String toString()
    {
    return note
    }
    }

    工作领域
    package beachit

    class Job
    {

    Date dateCreated
    Date lastUpdated

    Date createDate
    Date startDate
    Date completionDate

    List notes

    static hasMany = [notes : Note]

    static constraints =
    {
    }

    String toString()
    {
    return createDate.toString() + " " + startDate.toString();
    }
    }

    JSONNoteController
    package beachit

    import grails.converters.*
    import java.text.*

    class JSONNoteController
    {

    def test = { render "foobar test" }

    def index = { redirect(action:listAll,params:params) }

    // the delete, save and update actions only accept POST requests
    //static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def getListService =
    {
    def message
    def status
    def all = Note.list()

    return all
    }

    def getListByJobService(jobId)
    {
    def message
    def status

    def jobInstance = Job.get(jobId)
    def all

    if(jobInstance)
    {
    all = jobInstance.notes
    }
    else
    {
    log.debug("getListByJobService job not found for jobId " + jobId)
    }

    return all

    }

    def listAll =
    {
    def message
    def status
    def listView

    listView = getListService()
    message = "Done"
    status = 0

    def response = ['message': message, 'status':status, 'list': listView]
    render response as JSON
    }

    def deleteItem =
    {
    def jobInstance
    def noteInstance
    def message
    def status
    def jobId = 0
    def noteId = 0
    def instance
    def listView
    def response

    try
    {
    jobId = Integer.parseInt(params.job?.id)
    }
    catch (NumberFormatException ex)
    {
    log.debug("deleteItem error in jobId " + params.job?.id)
    log.debug(ex.getMessage())
    }

    if (jobId && jobId > 0 )
    {
    jobInstance = Job.get(jobId)

    if(jobInstance)
    {
    if (jobInstance.notes)
    {
    try
    {
    noteId = Integer.parseInt(params.note?.id)
    }
    catch (NumberFormatException ex)
    {
    log.debug("deleteItem error in noteId " + params.note?.id)
    log.debug(ex.getMessage())
    }

    log.debug("note id =" + params.note.id)
    if (noteId && noteId > 0 )
    {
    noteInstance = Note.get(noteId)
    if (noteInstance)
    {
    try
    {
    jobInstance.removeFromNotes(noteInstance).save()
    noteInstance.delete()

    message = "note ${noteId} deleted"
    status = 0
    }
    catch(org.springframework.dao.DataIntegrityViolationException e)
    {
    message = "Note ${noteId} could not be deleted - references to it exist"
    status = 1
    }
    /*
    catch(Exception e)
    {
    message = "Some New Error!!!"
    status = 10
    }
    */
    }
    else
    {
    message = "Note not found with id ${noteId}"
    status = 2
    }
    }
    else
    {
    message = "Couldn't recognise Note id : ${params.note?.id}"
    status = 3
    }
    }
    else
    {
    message = "No Notes found for Job : ${jobId}"
    status = 4
    }
    }
    else
    {
    message = "Job not found with id ${jobId}"
    status = 5
    }

    listView = getListByJobService(jobId)

    } // if (jobId)
    else
    {
    message = "Couldn't recognise Job id : ${params.job?.id}"
    status = 6
    }

    response = ['message': message, 'status':status, 'list' : listView]
    render response as JSON

    } // deleteNote
    }

    最佳答案

    我让它工作了......虽然我无法解释为什么。

    我在 deleteItem 中替换了以下行

    noteInstance = Note.get(noteId)

    与以下
    noteInstance = jobInstance.notes.find { it.id == noteId }

    出于某种原因,jobInstance.removeFromNotes 使用该方法返回的对象而不是 .get
    更奇怪的是,所有其他 gorm 函数(实际上不确定动态函数)都针对 noteInstance.get(noteId) 方法工作。

    至少它的工作虽然!

    关于grails - removeFrom* 不工作且没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2110055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com