würde ich einfach sagen:
Ember Modelle
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'),
});
Rails-Controller
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
Vorsicht: Diese Controller sind eine vereinfachte Version (Index nach filtern können zu angeforderten IDs, ...). Sie können einen Blick auf How to get parentRecord id with ember data für weitere Diskussion werfen.
Aktiv Modell Serializer
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
Wir sind Sideload Daten hier, aber man kann es vermeiden, die include
Parameter false
in ApplicationSerializer
Einstellung.
Die Anwender werden Kategorien & Noten von Ember-Daten empfangen & zwischengespeichert werden, wie sie kommen, und fehlende Teile werden bei Bedarf angefordert werden.
Benötigt Ember Data automatisch die Verwendung der entsprechenden URL (/users/:user_id/notes.json oder /categories/:category_id/notes.json), nur basierend auf der Zuordnung? – user1539664
Nein, es wird '/ notes' verwenden, aber Ihr Controller wird eine Join-Traversing-Beziehung sicherstellen, die von (Kategorien | user) ausgeht, so dass das Dataset nur auf nützliche Instanzen beschränkt ist. –
Es gibt also keine Möglichkeit, den Zugriff auf die Notizen von den Objekten Category und User zu ermöglichen. –