2

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

我的问题.rb:

class Question < ActiveRecord::Base
    belongs_to :path
end

我的路径.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 但是没有新的返回变量就没有办法包含问题吗?我希望我的意思很清楚。

4

2 回答 2

8

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

BooksController

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

在上述情况下,书籍 belongs_to 作者

于 2018-04-11T14:39:23.717 回答
1

这是相当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)

请注意,它还将向:includeto_json 方法添加选项。

于 2013-09-23T13:11:54.573 回答