2009-07-12 9 views
2

私は2つのドメイン..マスターと詳細を持っています。addToTag()のエラーを捕捉する方法[grails]

Master{ 
String masterName; 
static hasMany=[details:Detail] 
} 

Detail 
{ 
    String detailName ; 
    static belongsTo =[master:Master]; 
} 

私はエラーが詳細に存在する場合、私はmaster.saveを呼び出したとき)(

def save = { 
..... 
def master = new Master(params); 
params.detailsName.eachWithIndex(dtName, index -> 
    def detail = new Detail(); 
    detail.detailName = dtName; 
    .... 
    master.addToDetails(detail); 
} 
    ..... 
master.save(flush:true); 
} 

を保存し、マスターはまだデータを保存扱うフォームを持っています。詳細にエラーがある場合にマスターをキャンセルする方法を知りたいのですが、詳細のエラーを追跡する方法を知りたいのですが?

ありがとうございました

答えて

3

お取引は必要です。あなたはサービスでセーブを実行することができます。トランザクション=真とサービスでは、すべてのメソッドは、トランザクションでラップされ、任意の例外がスローされた場合は、自動ロールバックがあるでしょう:

class MasterService { 

    boolean transactional = true 

    def save(...) { } 
} 

それとも、トランザクション内のコードをラップするために、あなたのコントローラでwithTransactionクロージャを使用することができますサービスを作成したくない場合

+0

私はトランザクションを使用しましたが、エラー/詳細が挿入されていないことを知る方法がわかりません(名前が空白または日付がnullなど)。 私が知っている限り、詳細が有効でないときは、ヘッダがまだ挿入されているため、詳細が保存できませんでした。 addTo *()を実行すると、エラーが発生することなくオブジェクトが添付されます。しかし、あなたがsave()を実行すると、エラーがあってもエラーメッセージが表示されない場合、保存された詳細は保存されません。 – nightingale2k1

+0

detail.validate()をチェックし、falseであればdetail.errors.each {log.debug it}を使用してエラーをチェックできます。 –

関連する問題