如何在json响应中包含子对象

时间:2016-02-24 10:57:00

标签: ruby-on-rails ruby mongoid

嗨我正在尝试在渲染json做User.all时包含用户的角色 我在rails和Mongoid上使用ruby

我只在我的回复中得到了role_id ......

role_id":"56cb596bc226cb5c04efd1cb

用户模型:

class User
  include Mongoid::Document
  include ActiveModel::SecurePassword

  has_many :role
  belongs_to :store
  has_many :orders

角色模型:

class Role
  include Mongoid::Document

  belongs_to :user

  field :name, type: String
  field :active, type: Mongoid::Boolean

我得到的回应:

    {"_id":"...","api_key":"...","email":"jesus@drinkz.io","name":"... Garcia","password_digest":"...","promotion_ids":[],
"role_id":"56cb596bc226cb5c04efd1cb"}

我如何得到答复:GET / api / v1 / users

def index
    @user = User.first
    respond_with @user
  end

如何在响应中嵌入角色?

2 个答案:

答案 0 :(得分:2)

如果您还没有包含角色,那么您将获得仅代表用户的JSON。你可以做类似下面的事情

def index
  @user = User.first
  respond_with(@user, :include => :role)
end

老派的方式是,

def index
  @user = User.first
  respond_to do |format|
    format.json { render :json => @user.to_json(:include => :role) }
  end
end

答案 1 :(得分:1)

如果您尚未使用gem,请将gem'active_model_serializers'添加到您的gemfile中。然后使用

生成用户序列化程序
joins

然后将以下内容添加到app / serializers / user_serializer.rb文件中。

rails generate serializer user