如何向jbuilder索引页面添加额外的属性

Uch*_*nna 5 json ruby-on-rails jbuilder ruby-on-rails-4

我一直在尝试将自定义属性添加到jbuilder,就像我在显示页面中一样添加到我的索引页面,用于分页将paginate并且它不显示自定义属性.

例如,我在控制器操作中拥有的是

  def index
    #respond_with
    @publishers = Publisher.paginate(:page => params[:page], :per_page => 30)
    respond_to do |format|
      format.json
    end
  end
Run Code Online (Sandbox Code Playgroud)

我的index.json.jbuilder是

json.array!(@publishers) do |publisher|
  json.extract! publisher, :id, :name, :url
  json.categories do
    publisher.categories.each do |category|
      json.name category.name
      json.id category.id
      json.url url_for(category)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我想拥有的是什么

json.current_page @publishers.current_page
json.total_pages @publishers.totla_entries

json.array!(@publishers) do |publisher|
  json.extract! publisher, :id, :name, :url
  json.categories do
    publisher.categories.each do |category|
      json.name category.name
      json.id category.id
      json.url url_for(category)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这样我就可以在索引页面的json输出中显示current_page和总页数.

目前我所拥有的是

[{"id":1,"name":"facebook","url":"http://www.facebook.com","categories":{"name":"Art and Crafts","id":1,"url":"/categories/1-art-and-crafts"}}]
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点.我也在使用willpaginate

Uch*_*nna 8

经过漫长的喧嚣,并看看jbuilder如何显示模板工作,我意识到json.array!方法覆盖了块之外的任何东西,所以我做了几个tweeks并通过在如下所示的根节点中敲击来解决它

json.current_page @publishers.current_page
json.total_pages @publishers.total_entries
json.total_records Publisher.count

json.publishers do |publishersElement|
  publishersElement.array!(@publishers) do |publisher|
    json.extract! publisher, :id, :name, :url
    json.categories do
      publisher.categories.each do |category|
        json.name category.name
        json.id category.id
        json.url url_for(category)
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我得到的输出就是这个

{"current_page":1,"total_pages":1,"total_records":1,"publishers":[{"id":1,"name":"Bellanaija","url":"http://www.bellanaija.com","categories":{"name":"Art and Crafts","id":1,"url":"/categories/1-art-and-crafts"}}]}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您发布答案,这对我有所帮助.我认为你的两个方法都错了.你应该使用`json.total_pages @ publishers.total_pages`和`json.total_records @ publishers.total_records`. (2认同)