How to get the :remote => true working to update a part of the page?

In Rails 2, I used this kind of code to get a certain part of the page
to update.

<% if @section.has_sidebar %>

    <% for page in @section.pages %>
  • <%= link_to_remote "#{page.name}", :update=>'show_page', :url => { :controller=>'pages',:action=>'show_page', :id=>page.id }, :html=>{} %>

  • <% end %>
<% end %>
class='span-18 last vert_divider'<% end %>> <%= render :partial => 'pages/show', :locals => { :page=>@page } %>

In the controller :pages, I had a show_page method that just rendered
the partial again.

In Rails 3, I don’t know how to accomplish this. I want to use
jQuery, which I already know how to code, but I don’t know how to get
it working in this way. Should I create a js.erb file in my view? I
watched the #205 Unobtrusive Javascript - RailsCasts
but I still don’t know how to get it working to update one part of the
page! Basically, I have this sidebar with links on it, and each time a
user a clicks on one of them, the central part of the page should
update - AJAX! How do I do this? Do I still need this show_page
method in the controller?

I found a clean answer, and I thought I’d explain the solution.
Basically, I was too caught up in the jQuery and etc. - in this case,
Prototype works very nicely. With jQuery, I got to fumbling around
with a js.erb files. With prototype, in this, case the solution is
really clean.

Rails 3 link_to :remote - Rails - Ruby-Forum describes a similar solution.

—The View—

<% if @section.has_sidebar %>

    <% for page in @section.pages %>
  • <%= link_to "#{page.name}", page, :remote => true %>

  • <% end %>
<% end %>
class='span-18 last vert_divider'<% end %>> <%= render :partial => 'pages/show_page', :locals => { :page=>@page } %>

—PagesController—
class PagesController < ApplicationController

def show
@page = Page.find(params[:id])
respond_to do |format|
format.js {
render(:update) do |page| # uses Prototype, the JS framework
page.replace_html ‘show_page’, :partial => “show_page”, :locals
=> { :page => @page }
end
}
end
end

end

Hopefully this will help anyone who’s encountered this same problem,
so that person can come to the answer more quickly. :smiley: