Grails - использование нескольких принадлежностей, но только по одному - PullRequest
4 голосов
/ 27 декабря 2011

Если я хочу использовать класс домена, например, MoneyTransaction, для двух совершенно разных целей, т.е.

1) когда клиент размещает заказ

2) когда член получает оплату

такой, что у меня есть что-то вроде:

class Order {
   static hasMany = [transactions: MoneyTransaction]
}

class Member {
   static hasMany = [payments: MoneyTransaction]
}

и

class MoneyTransaction {
   static belongsTo = [order: Order, member: Member]
   static constraints = {
      order(nullable: true)
      member(nullable: true)
   }
}

, а затем по существу только использовать одну принадлежность / ассоциацию за раз, это довольно "стандартное" использование, или мне нужно переключить это моделирование? В настоящее время MoneyTransaction имеет возможность оплаты как кредитной картой, так и ACH, так как они применяются для заказов. Для платежей будет использоваться только часть ACH.

1 Ответ

6 голосов
/ 27 декабря 2011

Определения класса домена, которые вы опубликовали, кажутся правильными в зависимости от ваших требований. Одна из модификаций, которую я бы здесь сделал, - добавить пользовательский валидатор, чтобы убедиться, что и порядок, и элемент не равны нулю одновременно.

    static constraints = {

    order(nullable: true, validator: {field, inst -> inst.member || field})
    member(nullable: true)

    } 
...