[jQuery] requesting and sending JSON in a ruby on rails app

[jQuery] requesting and sending JSON in a ruby on rails app


Hi - first of all this is a plugin-specific question (about treeview)
- i sent it to the plugin discussion page but it seems pretty dead (no
posts for over a year), so i'm sending it here as well. If anyone
could help me out that would be fantastic.
I've been using treeview and have no problems with it so far.
However, to get better performance i'm now trying to switch to the
asynchronous version: http://jquery.bassistance.de/treeview/demo/async.html
In the example they use php to return some json to the tree, but i'm
using it in a ruby on rails app, and can;t work out how to get it to
work. Can anyone help? I'm really just not sure how to get the
required json for the update back to the treeview.
This is what i'm doing at the moment:
In the view:
jQuery(document).ready(function(){
jQuery("#prop-tree").treeview({
url: "tree/self_and_children"
});
});
...
<ul id="prop-tree">
</ul>
The url "tree/self_and_children" does seem to be calling the correct
controller and action, which is as follows:
def self_and_children
# expects the id of the branch which is clicked on, which will be
something like
# "property_id_79". We want property with id 79.
if params[:id]
property = Property.find(params[:id].split("_").last)
else
property = Property.root
end
@json = property.self_and_children_to_json
respond_to do |format|
if @json
#should never get an html request for this
format.html { render :text => @json }
format.xml { head :ok }
format.js { render :text => @json }
else
format.html { }
format.xml { render :xml => @json.errors, :status
=> :unprocessable_entity }
format.js
end
end
end
But, nothing comes back - at least, the tree doesn't change. My
questions are as follows:
a) is doing "render :text => @json" the proper way to send back the
chunk of json to treeview? Should i do something in a js.rjs file
instead?
b) how do i send through the id of the clicked-on branch to the
controller? (and retrieve it in the controller)
thanks in advance
max