diría simple:
modelos
Ember controladores
App.User = DS.Model.extend({
name: DS.attr('string'),
notes: DS.hasMany('App.Note')
});
App.Category = DS.Model.extend({
name: DS.attr('string'),
notes: DS.hasMany('App.Note')
});
App.Note = DS.Model.extend({
text: DS.attr('string'),
user: DS.belongsTo('App.User'),
category: DS.belongsTo('App.Category'),
});
Rieles
class UsersController < ApplicationController
def index
render json: current_user.users.all, status: :ok
end
def show
render json: current_user.users.find(params[:id]), status: :ok
end
end
class CategoriesController < ApplicationController
def index
render json: current_user.categories.all, status: :ok
end
def show
render json: current_user.categories.find(params[:id]), status: :ok
end
end
class NotesController < ApplicationController
def index
render json: current_user.categories.notes.all, status: :ok
# or
#render json: current_user.users.notes.all, status: :ok
end
def show
render json: current_user.categories.notes.find(params[:id]), status: :ok
# or
#render json: current_user.users.notes.find(params[:id]), status: :ok
end
end
Tenga cuidado: estos controladores son una versión simplificada (índice puede filtrar de acuerdo a los id. solicitados, ...). Puede echar un vistazo a How to get parentRecord id with ember data para mayor discusión.
activos Serializadores Modelo
class ApplicationSerializer < ActiveModel::Serializer
embed :ids, include: true
end
class UserSerializer < ApplicationSerializer
attributes :id, :name
has_many :notes
end
class CategorySerializer < ApplicationSerializer
attributes :id, :name
has_many :notes
end
class NoteSerializer < ApplicationSerializer
attributes :id, :text, :user_id, :category_id
end
se incluyen los datos de carga lateral aquí, pero que podría evitarlo, estableciendo el parámetro include
-false
en ApplicationSerializer
.
Los usuarios, categorías & notas serán recibidos & almacenan en caché por brasa de datos como vienen, y se pedirá a los elementos que faltan, según sea necesario.
Will Ember Data solicita automáticamente usar la URL apropiada (/users/:user_id/notes.json o /categories/:category_id/notes.json) solo en función de la asociación? – user1539664
No, usará '/ notes', pero su controlador asegurará la unión, la relación de desplazamiento a partir de (categorías | usuarios), por lo que el conjunto de datos estará limitado a solo instancias útiles. –
¿De modo que no hay forma de permitir el acceso a las notas de los objetos Categoría y Usuario? –