@brandon99 wrote:
I have been struggling with EmberData and using the EmbeddedRecordsMixin to define a particular model relationship I’m using. I have complete control over both the server and Ember application, so I know I can change the format to make this work, but I don’t know the right way to get what I want.
I have a model called mealplan which contains an embedded array of recipe ids, which I want to be loaded automatically by Ember’s hasMany functionality.
Here is the structure of my data returned by my server:
meal_plan: { week: { 1: { day: { 0: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 1: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 2: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 3: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 4: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 5: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 6: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] } } }, 2: { day: { 0: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 1: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 2: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 3: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 4: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 5: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] }, 6: { breakfast: [Number], lunch: [Number], dinner: [Number], snack: [Number] } } }, } }
and here is how I want this relationship to look like in Ember:
week: { 1: { day: { 0: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 1: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 2: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 3: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 4: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 5: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 6: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, } }, 2: { day: { 0: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 1: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 2: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 3: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 4: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 5: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, 6: { breakfast: DS.hasMany('recipe'), lunch: DS.hasMany('recipe'), dinner: DS.hasMany('recipe'), snack: DS.hasMany('recipe') }, } }, }
This hasMany relationship obviously doesn’t work because it’s not defined at the top level. My recipe model is simple enough:
export default DS.Model.extend({ instructions: DS.attr('string'), name: DS.attr('string'), cooking_time: DS.attr('string'), recipe_yield: DS.attr('string'), featured_image: DS.attr('string'), ingredients: DS.attr(), program_phase: DS.attr(), meal_types: DS.attr() });
The goal with this structure is to display a list of recipes for a given week of the user’s meal plan, such that something like:
mealplan.week["1"].day["0"].breakfast mealplan.week["1"].day["0"].lunch mealplan.week["1"].day["0"].dinner mealplan.week["1"].day["0"].snack
will display my recipe models.
Mainly I am confused about how to properly embed the recipe ids using the structure I need. After reading through the JSON-API spec and looking at its relationships object specification, I don’t think my data can be formatted according to the proper spec. Like I said at the beginning, I have complete control over the server so I can change the structure of my data in order to better comply with JSON-API specifications if that’s what I need to do.
Posts: 1
Participants: 1