Problemas na execução do método each

24 views
Skip to first unread message

FelipeAlmeida

unread,
Apr 27, 2012, 9:21:44 AM4/27/12
to rails-br
Bom dia a todos.

Sou novato em programação no framework RoR (aproximadamente 2 meses de
trabalho dom ele) e estou com um problema que não consigo resolver já
faz alguma tempo, bem, vamos lá.

Eu tenho um método each que faz um loop e traz vários objetos de uma
tabela para que eu possa apresentar para o usuário, até aí tudo bem e
eu uso um form_tag "por cima" desse método, acontece que ao apresentar
essas linhas da busca no banco de dados surgiu a necessidade de
adicionar um comentário para uma determinada ação do usuário (quando o
usuário clicar em um botão chamado "Reprovar" ele coloca um comentário
e esse comentário é salvo na tabela para o objeto determinado) e eu
tenho um botão do tipo submit para cada linha apresentada nesse
tabela, porém, para fazer com que o comentário fosse salvo eu precisei
criar um form_for dentro do método each, ou seja, para cada linha
apresentada na tabela um form_for é criado e botão submit faz a ação
especificada nesse form_for, o meu problema é que quando o rails
transforma as tags ruby em html ele não gera o form para a primeira
linha do método each, para todas as outras linhas apresentadas ele
gera esse form_for mas para a primeira linha não, então outra ação,
que está no form_tag é executada. Já pesquisei sobre o assunto mas não
encontrei nada que pudesse me ajudar, será que alguém já teve o mesmo
problema e pode me ajudar.

Obrigado.

Felipe Almeida

Celso Dantas

unread,
Apr 27, 2012, 9:27:22 AM4/27/12
to rail...@googlegroups.com
joga o código (ou parte dele) no gist/pastebin pra facilitar compreensão. 

2012/4/27 FelipeAlmeida <felipe.a...@gmail.com>

--
Você recebeu essa mensagem porquê está inscrito no Google
Groups "rails-br".
Para enviar uma mensagem para o grupo, mande um email para rail...@googlegroups.com
Para se descadastrar, mande um e-mail para
rails-br+u...@googlegroups.com
Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
Leia nossa política de uso: http://goo.gl/YGgt7

Bruno Arueira

unread,
Apr 27, 2012, 9:51:17 AM4/27/12
to rail...@googlegroups.com
Felipe,

Pelo que entendi é quase como um nested resources...

Ou seja haveria um form_tag e qualquer objeto associado deve ser utilizado um fields_for, porém como o Celso falou sem código fica difícil opinar :)

Att,

FelipeAlmeida

unread,
Apr 27, 2012, 10:35:04 AM4/27/12
to rails-br
Celso eu não sei como faço para colocar no diretório que você disse,
então vou colocar aqui para ver se ajuda. Valeu !!

<div class="q-form-container1">
<!--Fim da primeira parte do formulário-->

<!--Início da segunda parte do formulário-->
<%= form_tag("/timesheets/approve_all") %>
<div class="block-left">
<div class="q-form-header1">
<h4>Lista de Timesheets Pendentes: </h4>
</div>

<div id="consultinfowork" class="q-form-section1">
<div class="field1 tablespace1">
<table width="800" cellspacing="0" cellpadding="0"
border="0" class="list tablespace">
<thead>
<br><br>
<tr>
<th>Projeto</th>
<th>Semana/Início/Término</th>
<th>Colaborador</th>
<th>Esforço (%)</th>
<th>Atividades</th>
<th>Comentário</th>
<th colspan=2><center>Opções</center></th>
</tr>
</thead>

<tbody>
<%= form_tag 'display' %>
<% @timesheets.each do |timesheet| %>
<%= form_for timesheet, :url => {:action
=> :approve_no, :id => timesheet.id} do |time| %>
<div class="field1">
<tr>
<td><%= timesheet.project.name%></td>
<td><%= timesheet.week.semanaAno %></td>
<td><%= timesheet.user.name %></td>
<td><%= timesheet.effort %></td>
<td><%= timesheet.activities %></td>
<td>
<%=
collection_select(:timesheet,:review_manager,
Comment.find(:all, :conditions => ["status = 'Ativo'"], :order =>
"description"), :description, :description, {:prompt => true}) %>
</td>
<td><%= time.submit "Reprovar" %> </td>
<td><%= link_to "Aprovar", {:action
=> :approve_yes, :timesheet_id => timesheet.id} %> </td>
</tr>
</div>
<% end %>
<% end %>
</div>
</tbody>
</table>
<%= link_to "Aprovar Todos", :action => :approve_all %>
</div>
</div>
</div>
</div>
</div>

Abraços a todos

On Apr 27, 10:51 am, Bruno Arueira <bgnarue...@gmail.com> wrote:
> Felipe,
>
> Pelo que entendi é quase como um nested resources...
>
> Ou seja haveria um form_tag e qualquer objeto associado deve ser utilizado
> um fields_for, porém como o Celso falou sem código fica difícil opinar :)
>
> Att,
>
> Em 27 de abril de 2012 10:27, Celso Dantas <celsodan...@gmail.com> escreveu:
>
>
>
>
>
>
>
>
>
> > joga o código (ou parte dele) no gist/pastebin pra facilitar compreensão.
>
> > 2012/4/27 FelipeAlmeida <felipe.alm.si...@gmail.com>
> >> Visite o grupo emhttp://groups.google.com/group/rails-br?hl=pt-BR
> >> Leia nossa política de uso:http://goo.gl/YGgt7
>
> >  --
> > Você recebeu essa mensagem porquê está inscrito no Google
> > Groups "rails-br".
> > Para enviar uma mensagem para o grupo, mande um email para
> > rail...@googlegroups.com
> > Para se descadastrar, mande um e-mail para
> > rails-br+u...@googlegroups.com
> > Visite o grupo emhttp://groups.google.com/group/rails-br?hl=pt-BR

FelipeAlmeida

unread,
Apr 27, 2012, 10:39:12 AM4/27/12
to rails-br
O meu problema é nesse each:

Stefano Diem

unread,
Apr 27, 2012, 4:24:41 PM4/27/12
to rail...@googlegroups.com
Gist é esse site aqui: https://gist.github.com/ , que ajuda bastante pra na compartilhar um trecho de código.

Uma observação que talvez ajude: nunca, nunca mesmo coloque um form dentro de outro form. Isso porque se fizer isso o botão submit não vai saber qual form precisa submeter, e você vai ter um erro dificil de entender. O jeito de driblar este problema é com o uso de fields_for, que permite criar um 'sub formulário', mas parece ser esse o caso da sua aplicação.

Então, o seu problema é que você tem um <%= form_tag("/timesheets/approve_all") %>, depois (<%= form_tag 'display' %>) e dentro disso outro form (<%= form_for timesheet, :url => {:action => :approve_no, :id => timesheet.id} do |time| %>)

Eu não entendi a necessidade do form approve_all e do display, pois até onde vejo o único botão de submit é o <%= time.submit "Reprovar" %>, e esses forms não parecem estarem fazendo nada! Aconselho que remova os esses form_tags e veja se o problema persiste.

Abraços,
Stefano Diem Benatti

phone: 55 11 9343 0994
skype:  teonimesic



2012/4/27 FelipeAlmeida <felipe.a...@gmail.com>

Stefano Diem

unread,
Apr 27, 2012, 4:25:44 PM4/27/12
to rail...@googlegroups.com
Corrigindo: O jeito de driblar este problema é com o uso de fields_for, que permite criar um 'sub formulário', mas não parece ser esse o caso da sua aplicação.


Abraços,
Stefano Diem Benatti

phone: 55 11 9343 0994
skype:  teonimesic



2012/4/27 Stefano Diem <teoni...@gmail.com>

Felipe Almeida da Silva

unread,
Apr 27, 2012, 5:02:57 PM4/27/12
to rail...@googlegroups.com
Valeu Stefano, já havia corrigido o problema e era isso mesmo, como eu tinha um form dentro de outro, toda vez que o método each rodava a primeira vez o form_tag entendia que aquela linha era dele, brigadão cara.

Abraço
Reply all
Reply to author
Forward
0 new messages