1

私はGrailsを学び始めているので、これは初心者の質問かもしれません. 私の疑問は非常に単純ですが、検索しても探している回答が見つかりませんでした。

問題は次のとおりです。

次のように、私が持っている別のドメイン クラスと関係があるドメイン クラスがあります。

class Class3 {

    static belongsTo = [class1:Class1]

    (...)
}

そして、Class3 から JSON オブジェクトを受け取るアクションをコントローラー内に作成しています。この JSON の中に、私の class1 オブジェクトの ID があります。

問題は、Class3 のインスタンスを適切に作成し、その class1 プロパティを初期化して、class1 の ID のみを持ち、実際のインスタンスを持たない方法です。

私は今、このように探すことができるようになりましClass1.get(parsed_id)た(それが私が今していることであり、機能しています):

def jsonObj = request.JSON

def class3 = new Class3(class1: Class1.get(jsonObj.class1.id) (...))
class3.save(flush: true)

これは私のjsonがどのように見えるかです:

{class1:{id:1} (...)}

しかし、class1 のこのインスタンスを DB で調べて、class3 の関係を初期化し、それを DB に保存するのは少しオーバーヘッドだと思います。これを行うより良い方法はありますか?同様に、class1 の外部キーを class3 内に直接 DB に保存しSELECTます。

あるいは、JSON オブジェクトからオブジェクトを初期化する方法があるのでしょうか?

4

1 に答える 1

2

json 側で何をしているのかわかりませんが、一般的に、これは非常に簡単です。最も基本的なものは次のとおりです。特定のユーザーに属する新しいアドレスを作成するとします。

<form>
  <input type="hidden" name="user.id" value="${user.id}" />
  <label>street:</label>
  <input type="text" name="street" />
  ....
</form>

上記のフォームを送信すると、コントローラーは次のようになります。

class AddressController {

   def save() {
     def address = new Address(params)
     address.save()
   }
}

フォームがコントローラーに渡されると、パラメーターのマップが渡されます。そのうちの 1 つは次のとおりです。

user.id: 1234

このため、grails は Address オブジェクトに ID が 1234 の User のインスタンスを自動的に設定します。だからあなたがするとき:

address.save()

属している関係が確立されました。

于 2013-09-03T17:01:04.230 に答える