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)
我希望这就是你要找的东西.
| 归档时间: |
|
| 查看次数: |
17024 次 |
| 最近记录: |