1

ドメインに「コメント」文字列フィールドがあります。フィールドを保存または更新するたびに、同じドメイン (または別のドメイン) の別のフィールドからの文字列と一致する部分文字列がフィールドに含まれているかどうかを確認したいと考えています。そのフィールドのすべてのインスタンスを実行して、一致するかどうかを確認する必要があります。一致する場合は、コメント フィールド内のリンクに変換して、サブ文字列に一致するエントリの表示アクションに変換したいと考えています。

たとえば、シリアル番号のある製品のコメント フィールドには、コメント フィールドにシリアル番号を指定することで、製品が別の製品に置き換えられたかどうかが示されます。例: 「この製品は SN1234 に置き換えられました」。SN1234 をリンクに自動的に変換して、シリアル番号 SN1234 の製品を表示したいと考えています。

これについて最善の方法は何ですか?コントローラーで、GSPで?どのように ?

4

2 に答える 2

1

一致させようとしている列がインデックス化されている限り、一致のクエリを実行し、見つかった場合はコメントを変更して URL を含める必要があります。コントローラーまたはサービスは、ルックアップにとって実際には重要ではありません (ただし、おそらくサービスに入れます)。可能な限り高速になるように、検索がトランザクションではないことを確認する必要があります。GSPでこれを行うことは決してありません。

リンクを挿入するには、単純な検索と置換を行うことができます。リンクに変換するテキストがわかったら、擬似コードは次のようになります。

def comment = "This product was replaced by SN1234" 
def match = "SN1234"
def link = g.link(action: "show", controller: "product", id: "${product.id}", match)
comment = comment.replace(match, link)

あなたはその後で終わるだろう

"This product was replaced by <a href='/product/1234'>SN1234</a>"

これを行うにはもっと効率的な方法があるかもしれませんが、ここから始めるのが良いでしょう。

于 2012-10-31T14:57:16.657 に答える
0

GORM イベントを使用して、ドメインでそれを行うことができます。したがって、ドメインが挿入/更新されるたびに、フィールドが変更されたことを確認できます。次に、リンクを挿入できます。

def beforeInsert() {
    yourMethod()
}

def beforeUpdate() {
    if (isDirty('yourField')) {
        yourMethod()
    }
}
于 2012-10-31T14:57:09.770 に答える