Chris Larson
2006-Apr-05 23:07 UTC
[Rails] New AJAX function: remote_replace_with_partial() <-- write less code
I hate writing controller actions that support simple lightweight
ajax calls like this:
def show_buttons
render :partial => "home_buttons"
end
So the birth of remote_replace_with_partial
Now you can replace a div elements with any controllers partials and
pass those partials any number of params without having to write
supportive actions in your controllers. This is a great tool for UI
changes on the fly and cancel buttons
Heres the code:
application_helper file:
def remote_replace_with_partial(link, options = {}, params = {})
## For passing params ##
param_string = String.new
params.each {|key,value| param_string <<
"&#{key}=#{value}" }
string = link_to_function(link,
"update_page_element(''#{options
[:update]}'', ''#{options[:controller]}'',
''#{options[:partial]}'', ''#
{param_string}'');")
string
end
application.rb file:
def partial_handler
string = render_to_string :partial => params[:partial]
render :inline => string
end
javascript code: (this can be placed in a JS file or in your template)
<%= javascript_tag "function update_page_element(element_id,
controller ,partial_file, params)
{
new Ajax.Updater(element_id, ''/'' + controller +
''/partial_handler?
partial='' + partial_file + params, {asynchronous:true,
evalScripts:true}); return false;
} " %>
View code:
<%= remote_replace_with_partial(''change me ajax'', {:update
=>
''tag1'', :controller => ''forms'', :partial
=> ''test''}, { :name => ''joe
black'', :id => 2}) %>
Please provide as much feedback as possible -- I''m a noobe rails hacker
Enjoy,
Chris Larson