2015-06-11 40 views
0

灰燼CLI 0.2.5 +使用燼-CLI-軌寶石的Rails 4.2,active_model_serializer(0.9.3)灰燼屬於關聯關係的傳遞零到服務器上保存

目前我正在試圖給用戶傳遞到createRecord它在傳遞給rails時不會保存或綁定user_id。參數回來爲:

{"course"=>{"subject"=>"CSE", "number"=>110, "credit_hours"=>3, "grading_scale"=>"Regular", "user_id"=>nil}} 

灰燼控制器(查找用戶返回正確的值)

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    scales: ['Regular', 'Plus/Minus', 'Plus', 'Minus'], 
    weights: [], 

    actions: { 
    createCourse: function() { 
     var self = this; 
     var course = this.get('model'); 
     this.store.find('user', this.get('session.content.secure.id')).then(function(user) { 
     course.set('user', user); 
     }) 
     course.save().then(function(course){ 
     $.growl.notice({title: 'Course', message: 'Sucessfully created course.'}) 
     }) 
    } 
    } 
}); 

Rails的控制器

class CoursesController < ApplicationController 

    def index 
    @courses = User.find(params[:user_id]).courses 
    render json: @courses 
    end 

    def show 
    @course = Course.find(params[:id]) 
    render json: @course 
    end 

    def update 
    @course = Course.find(params[:id]) 
    if @course.update_attributes(params[:course]) 
     render json: @course 
    else 
     render json: @course.errors, status: 500 
    end 
    end 

    def create 
    @course = Course.new(course_params) 

    if @course.save 
     render json: @course, status: :created 
    else 
     render json: @course.errors, status: 500 
    end 
    end 

    private 

    def course_params 
    params.require(:course).permit(:subject, :number, :credit_hours, :grading_scale, :user_id) 
    end 

end 

串行器(我這裏有一個堆棧層太深錯誤,以便我使用了我以前看過的user_id,我甚至降級到0.8.3來修復這個錯誤,但仍然沒有運氣)

class CourseSerializer < ActiveModel::Serializer 
    embed :ids, include: false 

    attributes :id, :subject, :number, :credit_hours, :grading_scale, :user_id 
    #has_one :user 
    has_many :weights 
    has_many :grades 
end 

路線(漂亮的直線前進這裏)

import Ember from 'ember'; 
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin'; 

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    model: function() { 
    var store = this.store; 
    return store.createRecord('course'); 
    }, 
    setupController: function(controller, model) { 
    controller.set('model', model); 
    }, 
    actions: { 
    willTransition: function() { 
     var course = this.controller.get('model'); 
     course.rollback(); 
    } 
    } 
}); 

課程的片段模式

export default DS.Model.extend({ 
    user: DS.belongsTo('user'), 
    weights: DS.hasMany('weight',{ async: true }), 
    grades: DS.hasMany('grade',{ async: true }), 
    subject: DS.attr('string'), 
    number: DS.attr('number'), 
    creditHours: DS.attr('number'), 
    gradingScale: DS.attr('string') 

摘錄用戶模型

export default DS.Model.extend({ 
    courses: DS.hasMany('course'), 
    grades: DS.hasMany('grade'), 
    email: DS.attr('string'), 
    name: DS.attr('string'), 
    gradePoints: DS.attr('number'), 
    gradeUnits: DS.attr('number'), 
    password: DS.attr('string'), 
    password_confirmation: DS.attr('string') 

讓我知道如果我需要提供什麼其他。這讓我一陣沮喪。

回答

2

createCourse方法course.save()之前運行user承諾變得解決,這就是爲什麼你看到user_id: nil。這將工作:

createCourse: function() { 
    var self = this; 
    var course = this.get('model'); 
    this.store.find('user', this.get('session.content.secure.id')).then(function(user) { 
     course.set('user', user); 
     return course.save(); 
    }).then(function(course) { 
     $.growl.notice({title: 'Course', message: 'Sucessfully created course.'}); 
    }); 
}