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?

有帮助吗?

解决方案

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top