gpt4 book ai didi

grails - 在Save()上引用 Controller 中的相关记录ID

转载 作者:行者123 更新时间:2023-12-02 15:33:43 25 4
gpt4 key购买 nike

我对Grails和GORM还是陌生的,对此我感到困惑,无法弄清楚我做错了什么。目的是通过适用于Grails的Shiro插件自动将记录与登录用户相关联。

Class User { static hasMany = [stuff: Stuff] }
Class Stuff { static belongsTo = [user:User] }

Class StuffController {
def create = {
params.put('user', User.createCriteria().get{eq('username',SecurityUtils.subject.principal)}.id)
def stuffInstance = new Stuff(params)
stuffInstance.save()
}
}

我在创建脚手架的generate-views版本中看到相关字段称为name =“user.id”,但是它和变体(例如user_id)似乎都无效。对Users域的查询返回了必要的记录ID,在此上下文中,params.put似乎在我将其呈现到测试页时正确地将params对象附加了新值(因此我猜它不是不可变的),但这这是我从save()中得到的:
Property [user] of class [class org.stuffing.Stuff] cannot be null
我什至尝试过将其翻转并以其他方式移动,结果相同:
User.createCriteria().get{eq('username',SecurityUtils.subject.principal)}
.addToStuff(new Stuff(params))`
.save()

有人能启发我这里我所缺少的吗?

谢谢!

编辑:
显然我快要死了。我覆盖了“create”方法,但是默认操作是_form.gsp模板中的“save”,因此它没有执行该分支。

从好的方面来说,我确实通过下面的Burt了解了动态发现者,所以这并不是一头雾水。

谢谢您的时间,伙计们!

最佳答案

您的代码可以更加简洁-这里没有理由使用createCriteria。如果要按用户名搜索,请使用动态查找器:

def stuffInstance = new Stuff(params)
def user = User.findByUsername(SecurityUtils.subject.principal)
stuffInstance.user = user
if (!stuffInstance.save()) {
// inspect stuffInstance.errors
}

关于grails - 在Save()上引用 Controller 中的相关记录ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15215331/

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