Rails 3回答了json问题

Mik*_*ffe 2 activerecord json ruby-on-rails respond-with

生成一些json有困难.我试图将一个活动记录结果呈现给json,如下所示:

@data = User.find(1)
respond_with(@data, :include => :status)
Run Code Online (Sandbox Code Playgroud)

json的结果是:

{
  -user: {
    address: null
    email: "test@email.com"
    first_name: "Test"
    last_name: "Man"
    status_id: 1
    username: "testguy"
    status: { }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以有什么问题?问题是:include =>:status似乎没有带来关系.在我的用户模型中,我有一个belongs_to:status.如何让这个在单个结果集上工作?

当我这样做:

@data = User.where("id = 1")
respond_with(@data, :include => :status)
Run Code Online (Sandbox Code Playgroud)

这种关系在json结果集中表现得很好.但它在一个对象数组中,我不想要.

有任何想法吗?

小智 7

我假设您要包含的状态不是http状态代码(200,201等)之一,也不是以任何方式与User对象关联的对象,而是您自己的变量.

使用Rails 3.0.10和Ruby 1.9.2,您可能会发现这两种解决方案中的一种适合您.而不是如下respond_with使用render.

解决方案1

render :json => {:data => @data, :status => "whatever"}
Run Code Online (Sandbox Code Playgroud)

json的结果是:

{
  data:
  {
    user:
    {
      address: null
      email: "test@email.com"
      first_name: "Test"
      last_name: "Man"
      status_id: 1
      username: "testguy"
    }
  }
  status: "whatever"
}
Run Code Online (Sandbox Code Playgroud)

解决方案2

render :json => {:user => {:address => @data.address, :email => @data.email, ..., :status => "whatever"}}
Run Code Online (Sandbox Code Playgroud)

json的结果是:

{
  user:
  {
    address: null
    email: "test@email.com"
    ...
    status: "whatever"
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望这就是你要找的东西.