RedCloth + Ajax problem

I'm using RedCloth and am trying to update a div (id='page_content')
from an ajax link. The problem is that when the element is updated it
inserts the content twice and contains all kinds of ajax code, newline
and tab characters with the content. Here is the link:

link_to_remote "Exhibitions", update => 'page_content', :url =>
{ :controller => 'pages', :action => 'ajax_link', :page_name =>
"exhibitions" }, :loading => "Element.show('ajax-loader')", :loaded =>
"Element.hide('ajax-loader')"

the ajax_link action is:

  def ajax_link
    @page = Page.find_by_page_name(params[:page_name])
    respond_to do |format|
        format.js { }
        format.html { render :action => 'show' }
    end
  end

and the ajax_link.rjs is:

page.replace_html :page_content, :partial => 'page_content', :object
=> @page

Although if I change the ajax_link action to the following the div is
updated correctly:

  def ajax_link
    @page = Page.find_by_page_name(params[:page_name])
    respond_to do |format|
        format.js { render :text => "#{RedCloth.new
(@page.page_content).to_html}" }
        format.html { render :action => 'show' }
    end
  end

Thanks for any help,

Stu

If you’re using link_to_remote to call an action which has an RJS template, you need to remove the “update => ‘page_content’,” argument in link_to_remote. If you specify :update, link_to_remote expects to get back some HTML with which to replace that element of your DOM.

When you leave that off, link_to_remote looks for JavaScript (which is what RJS returns) to then execute on the client-side. That executed JavaScript then produces the HTML and decides where to put it.

Check out this thread for a (probably) more lucid explanation:

http://www.ruby-forum.com/topic/95288

Thanks for the help Ryan, works great.