我还是 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)似乎都不起作用。对用户域的查询返回必要的记录 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 了解了动态查找器,所以这并不是一个彻底的清洗。
谢谢你们的时间,伙计们!