vendredi 10 mars 2017

Save associated record in Ember

I am a beginner in Ember and trying to implement a simple post and comment app.

I have a rails background and hence i'm using Rails API for this.

I have followed a tutorial and i'm able to save a post, fetch all its comments and delete the post. However i'm having issues in saving comment related to the post.

Following is the code for models

post.js

import DS from 'ember-data';

export default DS.Model.extend({
  title: DS.attr('string'),
  body: DS.attr('string'),
  comments: DS.hasMany('comment')
});

comment.js

import DS from 'ember-data';

export default DS.Model.extend({
  author: DS.attr('string'),
  body: DS.attr('string'),
  post: DS.belongsTo('post')
});

routes/post/comment/new.js

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    return {};
  },
  renderTemplate() {
    this.render('post.comment.new', { into: 'application' });
  },
  actions: {
    save() {
      const post = this.modelFor('post');
      const newComment = this.get('store').createRecord('comment', this.currentModel);
      newComment.set('post', post);
      newComment.save().then(() => {
        this.transitionTo('post', post);
      });
    },
    cancel() {
      this.transitionTo('post', this.modelFor('post'));
    }
  }
});

router.js

import Ember from 'ember';
import config from './config/environment';

const Router = Ember.Router.extend({
  location: config.locationType,
  rootURL: config.rootURL
});

Router.map(function() {
  this.route('posts');
  this.route('post.new', { path: 'posts/new' });
  this.resource('post', { path: 'posts/:post_id' }, function() {
    this.route('comment.new', { path: 'comments/new' });
  });
});

export default Router;

Saving the comment is where i'm facing an issue. This is really strange but while saving the comment, the params passed to the server looks like

Parameters: {"comment"=>{"author"=>"dsa", "body"=>"asd", "post"=>"9"}}
Unpermitted parameter: post

From what i understand, the parameter should be post_id and not post. If post is being passed, then it should be object. I may be wrong of course because i don't have a clear understanding in Ember yet.

On randomly fiddling with the code, i found that if i replace the relationship in comments model from

post: DS.belongsTo('post')

to

post_id: DS.belongsTo('post')

the params passed to server are

Parameters: {"comment"=>{"author"=>"fg", "body"=>"dfs", "post_id"=>nil}}

This however doesn't actually pass the post_id as its nil.

This might be absolutely wrong and not how its supposed to work but i'm clueless.

Thanks for any help.




Aucun commentaire:

Enregistrer un commentaire