I am using respond_with
and everything is hooked up right to get data correctly. I want to customize the returned json
, xml
and foobar
formats in a DRY way, but I cannot figure out how to do so using the limited :only
and :include
. These are great when the data is simple, but with complex finds, they fall short of what I want.
Lets say I have a post which has_many
images
def show
@post = Post.find params[:id]
respond_with(@post)
end
I want to include the images with the response so I could do this:
def show
@post = Post.find params[:id]
respond_with(@post, :include => :images)
end
but I dont really want to send the entire image object along, just the url. In addition to this, I really want to be able to do something like this as well (pseudocode):
def show
@post = Post.find params[:id]
respond_with(@post, :include => { :foo => @posts.each.really_cool_method } )
end
def index
@post = Post.find params[:id]
respond_with(@post, :include => { :foo => @post.really_cool_method } )
end
… but all in a DRY way. In older rails projects, I have used XML builders to customize the output, but replicating it across json, xml, html whatever doesnt seem right. I have to imagine that the rails gurus put something in Rails 3 that I am not realizing for this type of behavior. Ideas?
It is not the rails 3 built-in way, but I found a great gem that is actively maintained on Rails 3: acts_as_api