I’m rendering a reasonable amount of JSON back to an application at the
moment and the controllers are starting to get very messy with the code
to
structure and return the JSON. Is it possible to have a template that
can
handle the structuring of the JSON data and allow the controller to deal
only with the business logic?
I’d envisage a controller like this:
class PersonController < ApplicationController
def search @search = Person.search(params[:query])
end
end
And a view named “person/search.json.erb” like:
json[:total] = @search.size
json[:people] = @search.map do |person|
{
:first_name => person.first_name,
:last_name => person.last_name
}
end
The json accessor used in the view would just be a hash that has to_json
called on it and is sent back to the browser as the json string.
Is it possible to do this at the moment or do I need to add a template
type
to ActionView?
class PersonController < ApplicationController
def search @search = Person.search(params[:query])
render :json => @search.to_json
end
end
Check out Rendering JSON in api.rubyonrails.org, just look into the
render method. I’m not aware of a rxml version for json, but also
can’t really see a need for one either. to_json will convert your
object directly into a javascript object so you can then eval them in
your AJAX response.
I have been using to_json but the issue is that there is often a
reasonable
amount of processing to structure the json correctly, say 10 lines or
so,
and the controller is becoming messy. If it was a simple to_json call I
wouldn’t be bothered.
I would also like access to the helpers for generating bits of HTML that
need to be returned.