Я пытаюсь выяснить для индексного маршрута /recipes
в Ember, как я могу не загружать дополнительные данные JSON, которые не нужны для этого конкретного представления, а загружать эти данные в отдельные маршруты рецептов.
Как это работает сейчас, Rails возвращает полезную нагрузку JSON, как я хочу:
/recipes.json
{
"recipes": [
{
"id": 1,
"title": "Scrambled Eggs"
}
]
}
/recipes/1.json
{
"steps": [
{
"id": 1,
"substep_ids": [
1,
2
]
}
],
"substeps": [
{
"id": 1
},
{
"id": 2
}
],
"recipe": {
"id": 1,
"title": "Scrambled Eggs",
"step_ids": [
1
]
}
}
Если я перейду к /recipes
в своем приложении Ember, оно отобразит
- Яичница-болтунья
- Оладьи
Но если я нажму на link-to
, я не увижу соответствующие шаги и подшаги, которые будут загружены при запросе API для /recipes/:recipe_id
. Если я вручную обновлю эту страницу, данные будут успешно загружены.
Есть ли способ сделать то, что я хочу?
На стороне рельсов:
class RecipesController < ApplicationController
def index
@recipes = Recipe.all.includes(steps: [:substeps])
render json: @recipes, each_serializer: ShortRecipeSerializer
end
def show
@recipe = Recipe.includes(:steps => [:substeps]).find(params[:id])
render json: @recipe
end
end
class RecipeSerializer < ActiveModel::Serializer
embed :ids, include: true
has_many :steps
attributes :id, :title
end
class ShortRecipeSerializer < ActiveModel::Serializer
attributes :id, :title
end
И на стороне Ember:
Recipe = DS.Model.extend
title: DS.attr('string')
steps: DS.hasMany('step', {async: true})
Step = DS.Model.extend
substeps: DS.hasMany('substep', {async: true})
recipe: DS.belongsTo('recipe')
Substep = DS.Model.extend
step: DS.belongsTo('step')
Заранее спасибо!