如何在Rails控制台中用Active Record的as_json方法限制关联集合嵌套层级
实现方案
你可以通过给as_json方法增加自定义的嵌套深度计数参数,实现最多4层的层级限制,同时修复原代码中关联名不匹配的问题(原代码方法中写的subarticles和定义的关联名sub_articles不一致)。
修改后的Article类代码
# article.rb class Article < ActiveRecord::Base belongs_to :parent, class_name: 'Article', optional: true has_many :sub_articles, class_name: 'Article', foreign_key: 'parent_id' def as_json(options = {}) # 初始化嵌套深度,默认从1开始(根节点算第1层) current_depth = options.delete(:nest_depth) || 1 base_options = {} # 深度小于4时才加载下一级子文章,最终最多展示4层 if current_depth < 4 base_options[:include] = { sub_articles: { # 子文章层级计数+1 nest_depth: current_depth + 1 } } end # 合并用户传入的自定义参数 super(base_options.merge(options)) end end
使用说明
- Rails控制台默认调用即可返回最多4层嵌套结构:
Article.first.as_json
- 如需临时调整嵌套层数,可主动传参修改:
# 自定义最多返回2层嵌套 Article.first.as_json(nest_depth: 1)
内容的提问来源于stack exchange,提问作者Samuel Da Costa
相关产品推荐
相关产品推荐

