在REST JSON结果中包含has_many结果

Cor*_*rdi 12 json ruby-on-rails ruby-on-rails-3

我有一个模型叫List那个has_many :entries.像往常一样,Rails 3生成了这个show方法List

def show
    @list = List.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @list }
    end
end
Run Code Online (Sandbox Code Playgroud)

如何更改format.json以包含json响应中的entries结果@list

我知道我可以转换@list为哈希,将哈希值添加到哈希值.entries,然后渲染哈希,但我怀疑Rails有更优雅的技巧.

tsh*_*rif 22

是的,:include你可以给一个选项to_json:

format.json { render json: @list.to_json(:include => :entries) }
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于多个模型,例如:`@list.to_json(:include => [:entries,:owners])`并且您可能希望通过使用include来优化初始SQL查询,例如:`@list = List.includes([:entries,:owners]).find(params [:id])` (2认同)
  • 如果以这种方式使用`as_json`不会使响应字符串化,那会更好。 (2认同)