Question

I'm trying to integrate JBuilder into Rails 3.2 project. I've installed the gem, and I've written a JBuilder file at app/views/books/index.json.jbuilder.

Here's my index action:

  def index

    @books = Book.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @books }
    end
  end

This seems to call the default as_json method of Book to render the response. What do I need to change to tell Rails to use my JBuilder template instead?

Was it helpful?

Solution

Remove the block you're passing to format.json. You're causing it to ignore your jbuilder file and instead return the result of json: @books as a response. If you leave the block out:

respond_to do |format|
  format.html # index.html.erb
  format.json # no block here
end

Then Rails will fall back to its default handling of the response and look for a template in your view directory, it'll find the jbuilder file and render that as the response.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top