salvar vários objetos simultaneamente!
11/01/2010 00:00
0
Olá Galera,

Estou tentando adicionar vários alunos(objetos) em uma Turma(objeto). Em um relacionamento de muito alunos para uma turma!

Como devo fazer no meu método save no TurmaController?

Obrigado!
Tags: Grails


0
Isto vai depender do modo como você tiver organizado seu código.

Supondo que seja algo do tipo


class Turma {
// bla bla bla
static hasMany = [alunos:Aluno]
}

class Aluno {
static belongsTo = [turma: Turma]
}


você poderia fazer o seguinte:

ir adicionando instancias de Aluno na sua instancia de Turma e em seguida simplesmente executar o método save() da sua instancia de Turma. Isto persistiria todas as instancias de uma vez.

A outra alternativa poderia ser simplesmente iterar em cima dos seus objetos, como dentro de um loop, persistindo um a um.


0
Olá Kiko!
Já fiz alguns sistemas que tem essa mesma estrutura de relacionamento mas nenhum que salvar vários objetos simultaneamente.

Mas kiko, o detalhe é que além de salvar os objetos tenho que adicionar um status para cada aluno. Minha dificuldade é como vou salvar vários objtetos(este obj estão listados através de um for (g:each) na view), relacionando-os com seus status. acho que é um problemas pessoal de lógica! rsrs... <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->
Ajuda por favor! <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
13/01/2010 00:00


0
Uai Arquimedes,

neste caso o que você pode fazer consiste em ir iterando sobre os objetos e os persistindo chamando o método save() conforme for alterando os valores de suas propriedades.


0
Ok kiko,
consegui através da criação de uma lista de alunos e depois interei dando um save em cada objeto da lista como você propôs! Estou com &quot;uma pedra no meu caminho&quot; em consequencia de uma sintuação semelhante a da formação da Turma feita com objeto disciplinasPadrao padrão para o objeto gradeCurricular, onde eu pego o disciplinasPadrao.nome e disciplinasPadrao.cargaHoraria e atribuo com um FOR em gradeCurricular.nome e gradeCurricular.cargaHoraria. Beleza! só tem um detalhe! eu quero atualizar a cargaHoraria no momento da criação da grageCurricular.

No controle está assim:


def formularioImportarDisciplinasParaGrade = {

def gradeCurricularCurso = new GradeCurricularCurso()
def cursoInstituicao = CursoInstituicao.get(params.id)
gradeCurricularCurso.cursoInstituicao = cursoInstituicao


return ['gradeCurricularCurso'&#58;gradeCurricularCurso, 'cursoInstituicao'&#58;cursoInstituicao]
}

/**
* exporta todas as disciplinas padrão para grade curricular, portanto
* será executado uma única vez por cursoInstituição.
*/

def importarDisciplinasParaGrade = {
def cursoInstituicao = CursoInstituicao.get(params.id)
def disciplinas = cursoInstituicao.curso.disciplinaPadrao

def listaDeDisciplinasOk = new ArrayList()
def listaDeDisciplinasQueFalou = new ArrayList()

for (disciplina in disciplinas) {
def gradeCurricularCurso = new GradeCurricularCurso(params)
gradeCurricularCurso.cursoInstituicao = cursoInstituicao

// Algo parecido que eu quero, pega os dados da view, onde posso alterar a carga horária DA GRADE, só que não consigo porque ele traz uma lista de cargaHoraria vindo de disciplina, COMO FAZER UM INDEX DINÂMICO DESTA LISTA?
[b]//gradeCurricularCurso.cargaHoraria = params.cargaHoraria[index][/b]

//assim eu pego direto da tabela disciplina, modo QUE NÃO QUERO
[b]gradeCurricularCurso.cargaHoraria = disciplina.cargaHorariaMin[/b]

gradeCurricularCurso.disciplinaPadrao = disciplina

gradeCurricularCurso.validate()
gradeCurricularCurso.save()

if(!gradeCurricularCurso.hasErrors() &amp;&amp; gradeCurricularCurso.save()) {
println &quot;----------------------Salvou disciplina&#58; ${disciplina.nome}!&quot;
listaDeDisciplinasOk.add(disciplina)
}
else {
listaDeDisciplinasQueFalou.add(disciplina)
}
}
flash.message = &quot;<b>Disciplinas adicionadas!</b><br> Salvas&#58; ${listaDeDisciplinasOk.size()} <br> Não Salvas&#58; ${listaDeDisciplinasQueFalou.size()}&quot;
redirect(action&#58;formularioDefinirCargaHoraria,id&#58;cursoInstituicao.id)

}



na view está assim:


<g:form action=&quot;importarDisciplinasParaGrade&quot; method=&quot;post&quot; >
<div class=&quot;conteudo&quot;>

<input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;${gradeCurricularCurso?.cursoInstituicao?.id}&quot; />
<input type=&quot;hidden&quot; name=&quot;gradeCurricularCursoId&quot; value=&quot;${gradeCurricularCurso?.id}&quot; />

<h3>Instituição: ${gradeCurricularCurso?.cursoInstituicao?.instituicao?.nome}<br>Curso: ${gradeCurricularCurso?.cursoInstituicao?.curso?.nome}</h3><hr />

<table>
<tr>
<th>Disciplina</th>
<th>Carga Horária</th>
</tr>

<g:each in=&quot;${cursoInstituicao.curso.disciplinaPadrao}&quot; status=&quot;i&quot; var=&quot;disciplina&quot;>
<tr>
<td><input size=&quot;30&quot; readonly=&quot;readonly&quot; type=&quot;text&quot; id=&quot;disciplinaPadrao&quot; name=&quot;disciplinaPadrao&quot; value=&quot;${disciplina.nome}&quot;/></td>
<td align=&quot;right&quot;><input optionKey=&quot;id&quot; size=&quot;5&quot; type=&quot;text&quot; id=&quot;${cursoInstituicao.curso.disciplinaPadrao.id}&quot; name=&quot;cargaHoraria&quot; value=&quot;${disciplina.cargaHorariaMin}&quot;/></td>
</tr>
</g:each>
</table>
</div>

<div class=&quot;buttons&quot;>
<span class=&quot;button&quot;><g:actionSubmit action=&quot;importarDisciplinasParaGrade&quot; value=&quot;Exportar Disciplinas&quot; /></span>
</div>
</g:form>




obrigado!
18/01/2010 00:00


0
Resolvido de maneira simples! com uma variável de incremento para o index da lista de cargas horária vindas de disciplinas padrão!
Controle:



/**
* exporta todas as disciplinas padrão para grade curricular, portanto
* será executado uma única vez por cursoInstituição.
*/

def importarDisciplinasParaGrade = {
def cursoInstituicao = CursoInstituicao.get(params.id)
def disciplinas = cursoInstituicao.curso.disciplinaPadrao

def listaDeDisciplinasOk = new ArrayList()
def listaDeDisciplinasQueFalou = new ArrayList()
def x = 0
for (disciplina in disciplinas) {
def gradeCurricularCurso = new GradeCurricularCurso(params)
gradeCurricularCurso.cursoInstituicao = cursoInstituicao

gradeCurricularCurso.cargaHoraria = params.cargaHoraria[x] as int
gradeCurricularCurso.disciplinaPadrao = disciplina

gradeCurricularCurso.validate()
gradeCurricularCurso.save()
x= x+1

if(!gradeCurricularCurso.hasErrors() &amp;&amp; gradeCurricularCurso.save()) {

listaDeDisciplinasOk.add(disciplina)
}
else {
listaDeDisciplinasQueFalou.add(disciplina)
}
}
flash.message = &quot;<b>Disciplinas adicionadas!</b><br> Salvas&#58; ${listaDeDisciplinasOk.size()} <br> Não Salvas&#58; ${listaDeDisciplinasQueFalou.size()}&quot;
//redirect(action&#58;formularioImportarDisciplinasParaGrade,id&#58;cursoInstituicao.id)
redirect(controller&#58;&quot;cursoInstituicao&quot;,action&#58;&quot;show&quot;, id&#58;cursoInstituicao.id)


}



Obrigado!
18/01/2010 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto