Hi, I am pretty new to ror... I create a table filled thanks to a partial with a collection. Each line is a "form_for" ending with a submit which update some values for a specific row. My problem is that I would like, after clicking on the submit button that, the concerned row and only this one updates and not the whole table. With the following code, it update well, but at the end at only view the modified row (loosing application layout, table view...) Can someone help me ? I have the following views : --------- views/home/index.html.erb <% content_for :content do %> <h1><%= @group.name %></h1> <table> <!-- Headers --> <tr> <th>Cars</th> <% @group.checks.each do |c| %> <th><%= c.name %></th> <% end %> </tr> <!-- Values --> <%= render :partial => "cars", :collection => @group.cars%> </table> <%= link_to ''Add car'', new_car_path %> <% end %> --------- views/home/_car.html.erb <tr> <% form_for car, :url => { :action => "update_car_checks" } do |f| %> <td><%= car.name %></td> <%= hidden_field_tag :car_id, car.id %> <% car.group.checks.each do |c| %> <td><%= text_field_tag ''check_'' + c.id.to_s, car.check_at (c.id), :size => 1 %></td> <% end %> <td><%= f.submit ''Record'' %></td> <% end %> </tr> Then, in home controller : --------- controllers/home_controller.rb def update_car_checks @car = Car.find(params[:car_id]) #... Some updates and check for the car... render :partial => "car" end
On Fri, Oct 23, 2009 at 4:46 PM, Alex2101 <legars2101-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Hi, > > I am pretty new to ror... > I create a table filled thanks to a partial with a collection. > Each line is a "form_for" ending with a submit which update some > values for a specific row. > My problem is that I would like, after clicking on the submit button > that, the concerned row and only this one updates and not the whole > table. With the following code, it update well, but at the end at only > view the modified row (loosing application layout, table view...) > > Can someone help me ? >You should submit that row using AJAX, and get the result to update that row. You have a few possible ways to do this. you should check the button_to_remote doc and you Javascript framework doc to implement a unobstrusive solution. Basically, the procedure is that, you submit your fields, via AJAX, and update the right row with the result.> I have the following views : > > --------- views/home/index.html.erb > > <% content_for :content do %> > <h1><%= @group.name %></h1> > <table> > > <!-- Headers --> > <tr> > <th>Cars</th> > <% @group.checks.each do |c| %> > <th><%= c.name %></th> > <% end %> > </tr> > > <!-- Values --> > <%= render :partial => "cars", :collection => @group.cars%> > </table> > > <%= link_to ''Add car'', new_car_path %> > <% end %> > > --------- views/home/_car.html.erb > <tr> > <% form_for car, :url => { :action => "update_car_checks" } do |f| > %> > <td><%= car.name %></td> > <%= hidden_field_tag :car_id, car.id %> > <% car.group.checks.each do |c| %> > <td><%= text_field_tag ''check_'' + c.id.to_s, car.check_at > (c.id), :size => 1 %></td> > <% end %> > <td><%= f.submit ''Record'' %></td> > <% end %> > </tr> > > Then, in home controller : > --------- controllers/home_controller.rb > def update_car_checks > @car = Car.find(params[:car_id]) > > #... Some updates and check for the car... > > render :partial => "car" > end > > > >-- Leonardo Mateo. There''s no place like ~
Alexandre Petitjean
2009-Oct-24 16:24 UTC
Re: Render or update only one element of a table
Thanks, you send me on the right way. This is how I resolve it thanks to Ajax : --------- views/home/_car.html.erb <tr id=''car_'' + <%= car.id.to_s %> > <% remote_form_for car do |f| %> <td><%= car.name %></td> <% car.group.checks.each do |c| %> <td><%= text_field_tag ''check_'' + c.id.to_s, car.check_at(c.id), :size => 1 %></td> <% end %> <td> <%= submit_to_remote ''update_btn'', ''Update'', :url => { :action => ''update_car_checks'', :id => car.id }, :update => ''car_'' + car.id.to_s %> </td> <%end%> </tr> And that''s all ! 2009/10/23 Leonardo Mateo <leonardomateo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>> > On Fri, Oct 23, 2009 at 4:46 PM, Alex2101 <legars2101-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > Hi, > > > > I am pretty new to ror... > > I create a table filled thanks to a partial with a collection. > > Each line is a "form_for" ending with a submit which update some > > values for a specific row. > > My problem is that I would like, after clicking on the submit button > > that, the concerned row and only this one updates and not the whole > > table. With the following code, it update well, but at the end at only > > view the modified row (loosing application layout, table view...) > > > > Can someone help me ? > > > You should submit that row using AJAX, and get the result to update that > row. > You have a few possible ways to do this. you should check the > button_to_remote doc and you Javascript framework doc to implement a > unobstrusive solution. > Basically, the procedure is that, you submit your fields, via AJAX, > and update the right row with the result. > > > I have the following views : > > > > --------- views/home/index.html.erb > > > > <% content_for :content do %> > > <h1><%= @group.name %></h1> > > <table> > > > > <!-- Headers --> > > <tr> > > <th>Cars</th> > > <% @group.checks.each do |c| %> > > <th><%= c.name %></th> > > <% end %> > > </tr> > > > > <!-- Values --> > > <%= render :partial => "cars", :collection => @group.cars%> > > </table> > > > > <%= link_to ''Add car'', new_car_path %> > > <% end %> > > > > --------- views/home/_car.html.erb > > <tr> > > <% form_for car, :url => { :action => "update_car_checks" } do |f| > > %> > > <td><%= car.name %></td> > > <%= hidden_field_tag :car_id, car.id %> > > <% car.group.checks.each do |c| %> > > <td><%= text_field_tag ''check_'' + c.id.to_s, car.check_at > > (c.id), :size => 1 %></td> > > <% end %> > > <td><%= f.submit ''Record'' %></td> > > <% end %> > > </tr> > > > > Then, in home controller : > > --------- controllers/home_controller.rb > > def update_car_checks > > @car = Car.find(params[:car_id]) > > > > #... Some updates and check for the car... > > > > render :partial => "car" > > end > > > > > > > > > > > -- > Leonardo Mateo. > There''s no place like ~ > > > >-- Cordialement, Alexandre Petitjean --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
2009/10/24 Alexandre Petitjean <legars2101-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> Thanks, you send me on the right way. This is how I resolve it thanks to > Ajax : > --------- views/home/_car.html.erb > <tr id=''car_'' + <%= car.id.to_s %> > > <% remote_form_for car do |f| %> > <td><%= car.name %></td> > <% car.group.checks.each do |c| %> > <td><%= text_field_tag ''check_'' + c.id.to_s, car.check_at(c.id), :size > => 1 %></td> > <% end %> > <td> > <%= submit_to_remote ''update_btn'', ''Update'', > :url => { :action => ''update_car_checks'', :id => car.id }, > :update => ''car_'' + car.id.to_s > %> > </td> > <%end%> > </tr>I think a form tag is not allowed to enclose a row, it must include the whole table or fit inside a cell. Copy the generated html and paste it into the w3c html validator web page to check. Colin> And that''s all ! > > 2009/10/23 Leonardo Mateo <leonardomateo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> >> On Fri, Oct 23, 2009 at 4:46 PM, Alex2101 <legars2101-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> > >> > Hi, >> > >> > I am pretty new to ror... >> > I create a table filled thanks to a partial with a collection. >> > Each line is a "form_for" ending with a submit which update some >> > values for a specific row. >> > My problem is that I would like, after clicking on the submit button >> > that, the concerned row and only this one updates and not the whole >> > table. With the following code, it update well, but at the end at only >> > view the modified row (loosing application layout, table view...) >> > >> > Can someone help me ? >> > >> You should submit that row using AJAX, and get the result to update that >> row. >> You have a few possible ways to do this. you should check the >> button_to_remote doc and you Javascript framework doc to implement a >> unobstrusive solution. >> Basically, the procedure is that, you submit your fields, via AJAX, >> and update the right row with the result. >> >> > I have the following views : >> > >> > --------- views/home/index.html.erb >> > >> > <% content_for :content do %> >> > <h1><%= @group.name %></h1> >> > <table> >> > >> > <!-- Headers --> >> > <tr> >> > <th>Cars</th> >> > <% @group.checks.each do |c| %> >> > <th><%= c.name %></th> >> > <% end %> >> > </tr> >> > >> > <!-- Values --> >> > <%= render :partial => "cars", :collection => @group.cars%> >> > </table> >> > >> > <%= link_to ''Add car'', new_car_path %> >> > <% end %> >> > >> > --------- views/home/_car.html.erb >> > <tr> >> > <% form_for car, :url => { :action => "update_car_checks" } do |f| >> > %> >> > <td><%= car.name %></td> >> > <%= hidden_field_tag :car_id, car.id %> >> > <% car.group.checks.each do |c| %> >> > <td><%= text_field_tag ''check_'' + c.id.to_s, car.check_at >> > (c.id), :size => 1 %></td> >> > <% end %> >> > <td><%= f.submit ''Record'' %></td> >> > <% end %> >> > </tr> >> > >> > Then, in home controller : >> > --------- controllers/home_controller.rb >> > def update_car_checks >> > @car = Car.find(params[:car_id]) >> > >> > #... Some updates and check for the car... >> > >> > render :partial => "car" >> > end >> > >> > > >> > >> >> >> >> -- >> Leonardo Mateo. >> There''s no place like ~ >> >> > > > > -- > Cordialement, > Alexandre Petitjean > > > >