使用jbuilder

时间:2015-11-27 06:32:18

标签: ruby-on-rails jbuilder ruby-2.1

在控制器的show方法中,我有@object设置查询

@object = WorkOrder.find(params[:id])  

现在,show.json.jbuilder模板的代码为:

json.extract! @object, :id, :note, :status, :created_at
json.store_name @object.store.display_name

和o / p是,

{
  "id": 31,
  "note": "work_order for store A",
  "status": "complete",
  "created_at": "2015-11-26T11:16:53.000Z",
  "store_name": "store name"
}

现在,如何插入' store_name'自定义键位于' status'之间和' created_at' ?

3 个答案:

答案 0 :(得分:2)

如果你想要特定顺序的属性,那么如果你自己添加它们可能会更好。

Jbuilder文件:

json.id @object.id
json.note @object.note
json.status @object.status
json.display_name @object.store.display_name
json.created_at @object.created_at

<强>输出

{
  "id": 31,
  "note": "work_order for store A",
  "status": "complete",
  "display_name": "store name",
  "created_at": "2015-11-26T11:16:53.000Z"
}

我建议你嵌入关系。如果要添加Store的其他属性,则可以更好地扩展。

示例:

Jbuilder文件:

json.id @object.id
json.note @object.note
json.status @object.status

json.store do
  json.name @object.store.display_name
end

json.created_at @object.created_at

<强>输出

{
  "id": 31,
  "note": "work_order for store A",
  "status": "complete",
  "store": {
    "name": "store name"
  },
  "created_at": "2015-11-26T11:16:53.000Z"
}

稍后您可以轻松地将属性添加到Store哈希,而不会破坏界面。

答案 1 :(得分:1)

你也可以让Rails像这样做魔术:

render :json => @object, :include => {:store => {:only => :display_name}}

答案 2 :(得分:-2)

我担心它无法将store_name带到其他位置。你应该对你拥有的东西感到满意。