繁体   English   中英

Rails-在json响应中包含关联

[英]Rails - Include association in json response

我有2个表格/模型:路径和问题。 每个问题都属于一条路径

我的question.rb:

class Question < ActiveRecord::Base
    belongs_to :path
end

我的path.rb

class Path < ActiveRecord::Base
    has_many :questions
end

一切都很好

p = Path.last
Path.questions

返回我需要的一切,但我返回的是json响应,如下所示:

@path = Path.find_by_id(params[:id])
render :status=>200, :json => {:status => "success", :path => @path, :message => "Showing path"}

该答案不包括课程的问题。 我必须更改哪些内容以包含属于该路径的所有问题? 我知道我可以只添加:path_questions => @ path.questions,但是没有新的返回变量,没有办法包含问题吗? 我希望我的意思很清楚。

这很hacky,但应该可以:

:path => @path.as_json.merge(:questions => @path.questions.as_json)

最终,您可以在模型中覆盖as_json:

def as_json(options={})
  includes = [*options.delete(:include)]
  hash = super(options)
  includes.each do |association|
    hash[self.class.name.underscore][association.to_s] = self.send(association).as_json
  end
  hash
end

然后只需调用:: :path => @path.as_json(:include => :questions)

注意,它还将在:include to_json方法中添加:include选项。

我在Rails 5 API应用程序中这样做:

BooksController

def index
  @books = Book.limit(params[:limit])
  render json: @books, include: ['author'], meta: { total: Book.count }
end

在上述情况下, Book belongs_to Author

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM