2016-10-10 7 views
0

В настоящее время я использую Grails 2.5.4 с плагином MongoDB (org.grails.plugins: mongodb: 6.0.0.RC1), и всякий раз, когда я пытаюсь обновить список любого класса домена, он не работает, например : классGrails MongoDB Списки не обновляются, я что-то не так?

Votation:

class Votation { 

String question 
int minVotes 
List <VoteOption> options 
User owner 
Chat chat 

static belongsTo = [chat: Chat] 
static embedded = ['options'] 

static constraints = { 
    owner nullable: false 
    chat nullable: false 
    //question nullable: false 
} 

класс VoteOption:

class VoteOption { 
    String option 
    String url 
    List <User> voters 

    static belongsTo = [chat: Chat] 
} 

Когда я пытаюсь обновить список:

//some more code... 
Votation votation = Votation.findById(votationId as Long) 
VoteOption option = votation.options.find { it.option == votationOption } 
User user = User.findOrCreateNew(params.user) 
if (option.voters) { 
    option.voters.add(user) // THIS DOESN'T WORK! 
} 
else { 
    option.voters = [user] //This DOES work 
} 

Это всего лишь пример, у меня есть еще 2 класса домена, которые также имеют списки, и они тоже не работают. Перезапуск Grails не исправляет это, и это также происходит на компьютере другого разработчика, так что это не мое окружение. Все остальное сохраняется правильно

+0

Это не 'option.voters.add (пользователь)' при использовании GORM это 'option.addToVoters (пользователя)'. –

ответ

0
Try this 

//some more code... 
Votation votation = Votation.findById(votationId as Long) 
VoteOption option = votation.options.find { it.option == votationOption } 
User user = User.findOrCreateNew(params.user) 
if (user) { 
    option.addToVoters(user) // <---- 
} 

option.save(flush:true, failOnError:true) 

Ref: http://docs.grails.org/2.1.0/ref/Domain%20Classes/addTo.html

+0

Это тоже не сработает, извините –

+0

Я только что добавил метод save(). Если GORM не может сэкономить из-за ошибки проверки, это вызовет ошибку ValidationException. – elixir

+0

Он не выбрасывает исключение, а .validate() возвращает true, вот что самое неприятное в этом –