Как мне представить один ко многим в Grails с ограничением на другой класс домена? - PullRequest
2 голосов
/ 30 ноября 2011

Я не уверен, возможно ли это, но вот пример.

class Album {
   static hasMany = [ reviews: Review ]
}

class Author {
   static hasMany = [ reviews: Review ]
}

class Review {
   static belongsTo = [ album: Album, author: Author ]
}

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

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

Просто добавьте уникальное ограничение

class Review {
   static belongsTo = [ album: Album, author: Author ]

   static constraints = {
       album unique: 'author'
   }
}

Код ошибки, который будет устранен при нарушении этого ограничения: review.album.unique

3 голосов
/ 30 ноября 2011

Я предполагаю, что экземпляр класса Author является автором рецензии на альбом, другими словами, "рецензентом". Если это так, следующий валидатор в классе Review убедится, что его автор еще не просмотрел альбом. См. http://grails.org/doc/1.3.x/ref/Constraints/validator.html для получения дополнительной информации о пользовательских валидаторах.

class Album {
    static hasMany = [ reviews: Review ]
}

class Author {
    static hasMany = [ reviews: Review ]
}

class Review {
    static belongsTo = [ album: Album, author: Author ]

    static constraints = {
        author(validator: {
            val, obj ->
            for(review in obj.album.reviews){
                if(review.author == val){
                    return 'doubleEntry' //Corresponds to the "review.author.doubleEntry" error in your message.properties file which you will need to create by adding the line "review.author.doubleEntry=You cannot review this Album twice!" to your message.properties file.
                }
            }
            return true
        })
    } 
}
1 голос
/ 30 ноября 2011

Я не думаю, что вы можете применять его с ограничением, если только вы не можете получить что-то вроде ограничения на несколько столбцов для работы с классом Review.Итак, уникальным ограничением будут свойства альбома и автора, сгруппированные вместе в классе Review.

Я не пробовал, просто видел это в документации здесь: http://grails.org/doc/2.0.0.RC1/ref/Constraints/unique.html

...