【问题标题】:How to modify a json response to include own keys instead it being created by itself in rails?如何修改 json 响应以包含自己的键,而不是在 rails 中由它自己创建?
【发布时间】:2013-09-27 06:35:37
【问题描述】:

我有两个模型类别和子类别

class Category < ActiveRecord::Base
    has_many :sub_categories

class SubCategory < ActiveRecord::Base
    belongs_to :category

现在在我的 sub_category 控制器中

@sub_category = SubCategory.paginate(:page => params[:page], :per_page => params[:per_page]).all(:order => 'id ASC')
respond_to do |format|
          format.json { render json: {:sub_category => @sub_category.as_json(:only => [:id, :name, :category_id, :created_at, :updated_at])} }
      end

但我想要子类别所属的类别对象,如下所示

    [
    {
    "sub_category":
    [{
    "created_at":"2013-09-25T07:16:53Z",
    "id":2,
    "name":"mobile",
    "updated_at":"2013-09-25T07:19:39Z"
    "category":{"id":1, "name":"gadgets"}
    }]
    }
    ]

我该怎么做?请帮帮我。

【问题讨论】:

    标签: ruby-on-rails json ruby-on-rails-3 ruby-on-rails-3.2 associations


    【解决方案1】:

    这应该可行:

    @sub_category = Subcategory.paginate(:page => params[:page], :per_page => params[:per_page]).order('id ASC').includes(:category)
    respond_to do |format|
      format.json { render json: {:sub_category => @sub_category.as_json(
        :only => [:id, :name, :category_id, :created_at, :updated_at],
        :include => {:category => {:only => [:id, :name])} }
    end
    

    【讨论】:

    • 谢谢,我一直在尝试这个,但我所做的是:include => [:categories] 而不是:include => [:category]。所以还是谢谢你。
    • 还有一个疑问。在类别中,我可以使用 :include => [:sub_categories] 但我可以限制要包含的子类别的数量。也许我们可以在模型中定义它,但我只想限制这个响应。这可能吗?
    • @Logesh 基本上,你不能因为急切加载的工作原理。
    • 好的。有没有其他方法可以限制或者我可以这样做 Category.includes(:sub_categories).first 或类似的东西。实际上我想获取类别以及第一个 sub_category。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多