私はまだ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()
}
}
create-viewsバージョンのcreatescaffoldで、関連するフィールドが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を介して動的ファインダーについて学習したので、それは完全な洗浄ではありませんでした。
お時間をいただきありがとうございます。