Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating Child Records in hasMany Relationship with Ember.Js

I haven't found a satisfactory answer through my search, so I figured I'd ask here.

I'm currently using Ember.Js, Ember-Data, and Ember-Firebase-Adapter, and attempting to create a CRUD application which will create a Parent Record, and then subsequent Child Records to said Parent Records.

(note that DS.Firebase.LiveModel is the Firebase adapter equivalent of DS.Model/Ember.Model)

Here are my models, altered to be generic Post/Comment types

    App.Post = DS.Firebase.LiveModel.extend({
      name: DS.attr('string'),
      body: DS.attr('string'),
      date: DS.attr('date'),
      comments: DS.hasMany('App.Comment', {embedded: 'always'})
    });

    App.Comment = DS.Firebase.LiveModel.extend({
      message: DS.attr('string'),
      timestamp: DS.attr('string'),
      post: DS.belongsTo('App.Post', {key: "post_id"})
    });

(Should my post_id = post?)

And here is my route for creating Comments:

    App.PostsCommentRoute = Ember.Route.extend({
      setupController: function(controller) {
        controller.set('content', App.Comment.find());
      }

    });

Here's my controller for the PostsCommentRoute:

    App.PostsCommentController = Ember.ObjectController.extend({
      newMessage: null,
      newTimestamp: null,

       saveComment: function() {
        App.Pbp.createRecord({
          message: this.get('newMessage'),
          timestamp: this.get('newTimestamp')
        })


          App.store.commit();
          this.set('newMessage', null);
          this.set('newTimestamp', null);


        }
    });

I think I may be missing the serializer? And I've read several things on addArray but the things I tried to plug in did not prove fruitful. Because my comments create fine, however they are not associated to the post in anyway in my JSON.

Is there a way for the created Comments to find the related Post_Id and then associate to said Post when created? So my Post JSON has an array of Comment_Ids which then allows them to be displayed with the post?

Any help, or links with good examples would be much appreciated. I know this is a relatively simple quandary yet I've been stuck on it for some time now :p

like image 245
Eric Johnson Avatar asked Oct 03 '22 05:10

Eric Johnson


1 Answers

What you can try and do is this

post = App.Post.find(1);
post.get('comments').pushObject(App.Comment.createRecord({})); //This will add a new comment to your post and set the post_id as the post id
App.store.commit()

Hope it helps

like image 86
achakravarty Avatar answered Oct 13 '22 10:10

achakravarty