Updating a table with Ajax

I’ve been banging my head against the wall trying to update a table
(add/delete rows) using Ajax. It seems simple enough but just doesn’t
work
for me. I can get it to work using DIVs instead of a table, but doing
the
layout with DIVs is much more cumbersome and I know it works for others
with
a table (though I haven’t been able to find an exact example code
anywhere).
Here’s my code (simplified for this example:)

View:

    <% for @comment in @comments %>
            <%= render :partial => 'comment_list' %>
    <% end %>

You can add a comment.

<%= form_remote_tag :update => 'comment_list', :position => :bottom,

:url => {:action => ‘add_comment’} %>

<%= text_area_tag('new_comment_text', nil, :size => '50x8') %>

<%= submit_tag 'Submit' %>

Then my _comments_list.rhtml partial:

<td><div class='comment_user'>
    <b><%= @comment.user.firstname %></b><br/>
    <span style="font-size: smaller;"><%= 

@comment.created_at.strftime(’%d
%B’) %>

<td><div class='comment_comment'><%= in_place_editor_field :comment,

:comment, {}, { :rows => 10 } %>

<td><%= link_to_remote image_tag('delete'),
    { :url=>{
        :action=>"delete_comment",
        :id=>@comment.id},
    :update=>"comment#{@comment.id}",
    :loading=>"status('comment#{@comment.id}')"},
    { :class => 'del_comment'}
    %></td>

Here’s the problem:

The ajax updating works, but instead of putting the new comment inside
the
table, it puts it after the table.

The delete button doesn’t update the table either (unless I refresh the
page
of course). in my “delete_comment” action I have render :text => ‘’.

Could anyone point me to some sample working code of how to update table
rows with ajax? THanks.

Refer below example, it might be of help: Here hint is,
Give unique id to each table row. You can use a session variable
which
will be incremented for each row.
For adding a new row to a table: give id to

tag & use it as a
reference id in “rjs” for rendering a partial.
For removing a row from a table: simply write a rjs with code:
page.remove .

Example:
(1) tablepage.rhtml

<%= javascript_include_tag :defaults %>
column1 column2 column3
val11 val12 val13 <%=link_to_remote 'Remove', :url => {:action => 'RemoveRow',:rowCount => "1"}%>




<%=link_to_remote ‘Add New Row’, :url => {:action => ‘addNewRow’}%>

(2) addNewRow.rjs page.insert_html :bottom, 'tabrow', :partial=> 'row_disp', :locals => {:count => @count}

(3) _row_disp.rhtml

val<%=count%>1 val<%=count%>2 val<%=count%>3 <%=link_to_remote 'Remove', :url => {:action => 'RemoveRow',:rowCount => count}%> (4) removeRow.rjs page.remove @rowAttrCount (5) Controller code before_filter :set_counter, :only => :addNewRow

def set_counter
session[:count] = session[:count] || 1
session[:count] += 1
@count = session[:count]
end

def addNewRow
puts “\n controller addNewRow”
p @count
end

def RemoveRow
@rowAttrCount = params[:rowCount]
end

Let me know if this helps.

With Regards,
Medha.

Hello,
Well, actually, I am updating a table with Ajax, although, perhaps
‘update’ is too strong a word - read my rough explanation and you decide
for yourself :wink: I have a select button that calls an ajax function which
then updates a table wrapped in a

with a whole new copy of the
table. I have some :before javascript that grabs the values and stashes
them into an array, then :after the ajax has updated with the new blank
table, it re-populates the table :slight_smile: This allows someone to change the
number of rows in the table pretty easily.
Its not 'update' in the strictest sense of the word. I don't update

merely one row at a time, it does require the table ‘blank’ to be passed
over, granted, however its much quicker than posting the details over
and re-sending them back. Its perhaps not the nicest way to do it,
however, it does scale well upto 100 rows or so. This is an online
booking system, so, having a (very) arbitrary limit of 100 ‘contacts’ on
any booking is not -that- big of a problem :wink:

Jst a thought :)
Regards
Stef

On 8/14/06, Medha K. [email protected] wrote:

Yes, it worked just great. I’ll try to add this to the Rails wiki
sometime.

I’m quite sure I had tried what you had suggetsed before (assigning an
id to
each row) and it hadn’t worked. What’s different about your code is the
use
of the

tag, which I hadn’t used (I was assigning an id to the
table
and updating that instead.

Also, instead of using a counter for the rows, I use the id of the
record
displayed. Simplifies the code since no set_counter function is needed.
Row
ids are as follows (assuming @comment is the record displayed)

Then in my delete_comment action:

@row_to_delete = ‘comment’+params[:id].to_s

delete_comment.rjs:

page.remove @row_to_delete

Thanks, Medha!

zer0halo wrote:

I’ve been banging my head against the wall trying
to update a table (add/delete rows) using Ajax.

I know it works for others with a table

No, it doesn’t work for others with a table. That’s why you can’t find
working code examples. Long-story-short is … check MSDN, “How To
Build
Tables Dynamically” and you’ll see that tables are addressable via the
Table
Object Model, not the Document Object Model.

CSS is a little more work in the short-term since we already know how to
use
tables but, I’ve found, not that tough. There are some very good
resources
too. The css-discuss mailing list ( http://css-discuss.incutio.com/ )
is a
great place to start for anyone looking for help making the change.

hth,
Bill

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs