Рендеринг всех уровней рекурсивных ассоциаций с JSON API - PullRequest
0 голосов
/ 01 апреля 2019
  • Одна категория может иметь одну или несколько категорий
  • Одна категория относится (необязательно) к одной категории

    def index
      @categories = Category.all
    
      render json: @categories, include: 'categories.**', only: [:name, :category_id]
    end
    

Этот кодтолько рендеринг одного уровня ассоциации:

[
{
    "name": "any1",
    "category_id": null,
    "categories": [
        {
            "id": 13,
            "name": "any2",
            "created_at": "2019-04-01T02:21:02.258Z",
            "updated_at": "2019-04-01T02:21:02.258Z",
            "category_id": 12
        }
    ]
},
{
    "name": "any2",
    "category_id": 12,
    "categories": [
        {
            "id": 14,
            "name": "any3",
            "created_at": "2019-04-01T02:21:48.600Z",
            "updated_at": "2019-04-01T02:21:48.600Z",
            "category_id": 13
        }
    ]
},
{
    "name": "any3",
    "category_id": 13,
    "categories": []
}

]

В идеале я бы получил "any3" внутри "any2", в соответствии с Rails Api Documentation я могуВыполните это, добавив «category. *» для одного уровня или «. **» для всех ассоциаций, но ни одна из них не работает.

render json: @categories, include: 'categories.**', only: [:name, :category_id]

Ошибка:

NoMethodError (undefined method `categories.*' for # 
<Category:0x00007fae0c950ff8>

category.рб

class Category < ApplicationRecord
  belongs_to :category, :class_name => 'Category', optional: true
  has_many :categories, :class_name => 'Category', :foreign_key => 'category_id'

  accepts_nested_attributes_for :category
end
...