我想在我的rails应用程序中通过JSON呈现所有文章的索引以及完整的文章,但是我在弄清楚如何做到这一点时遇到了一些麻烦.
这是我的控制器:
if params[:id] @article = Article.find(params[:id]) else @article = Article.published.not_draft.by_recent.first end respond_to do |format| format.js { render :json => @article.to_json( :except => [ :created_at, :updated_at, :draft, :id, :publish ], :include => { :comments => { :only => [:body] } }), :callback => params[:callback]} end
我想在响应中做的是添加所有文章的索引,如下所示:
@index = Article.find(:all, :select => 'id, title')
我能够做到的唯一方法是将索引和文章放入哈希或数组中,然后将其放入JSON中.
@response = { :item => @article, :index => @index }
两者的完整代码:
@index = Article.find(:all, :select => 'id, title') if params[:id] @article = Article.find(params[:id]) else @article = Article.published.not_draft.by_recent.first end @response = { :item => @article, :index => @index } respond_to do |format| format.js { render :json => @response.to_json(), :callback => params[:callback]} end
这没关系,除非现在我无法指定:include
或:except
让它正确渲染.
你暗示问题中的解决方案.您很可能希望构建一个哈希来呈现给JSON.现在这样做的首选方法是为as_json方法提供一个实现.as_json提供了一种通过构建包含要编码的数据的哈希来自定义to_json输出的正式方法.
有关as_json和to_json如何交互的更全面的处理可以在Jonathan Julian的博客上找到.