模型钩抛出错误。烬

时间:2016-06-16 18:39:40

标签: ember.js ember-data

在我的应用程序中,用户可以吃很多餐。膳食属于用户。我有它,以便用户可以通过创建记录并保存它来发布一顿饭。完成此操作后,我的控制台立即抛出错误:

Error: Assertion Failed: You need to pass a model name to the store's modelFor method at new Error (native)

然后,当我开始收到错误时,我写了我的模型钩子来吃饭:

TypeError: Cannot read property 'some' of undefined

我不确定是什么原因造成的。这是我的代码:

用户模型:

import DS from 'ember-data';
import { hasMany } from 'ember-data/relationships';

export default DS.Model.extend({
  email: DS.attr('string'),
  height: DS.attr('number'),
  weight: DS.attr('number'),
  age: DS.attr('number'),
  tdee: DS.attr('number'),
  gender: DS.attr('string'),
  activity_level: DS.attr('number'),
  meals: hasMany('meal')
});

膳食模型:

import DS from 'ember-data';
import { belongsTo, hasMany } from 'ember-data/relationships';

export default DS.Model.extend({
  meal_type: DS.attr('string'),
  created_at: DS.attr('date'),
  user: belongsTo('user'),
  // meal_items: hasMany('meal_item')
});

膳食路线:

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    return this.get('store').findAll('meal');
  },
  actions: {
    createMeal(data) {
      let meal = this.get('store').createRecord('meal', data);
      meal.save();
    }
  }
});

我是ember的新手,但有预感可能与明确的反转相关?建议表示赞赏。如果需要澄清,我可以发布更多代码。

编辑:

对服务器的GET请求成功。膳食数据在DS中。

所以我将createMeal操作传递给我的create-meal组件:

{{create-meal meals=model createMeal="createMeal"}}

组件会在提交时重新发送此操作:

import Ember from 'ember';

export default Ember.Component.extend({
  form: {},
  actions: {
    submit (){
      this.sendAction('createMeal', this.get('form'));
    }
  }
});

以下是该组件的模板:

<label class="col-md-3">Create A Meal</label>
<div class="input-group col-md-8 col-centered create-meal-div">
  {{input value=form.meal_type type="text" class="form-control" placeholder="Enter Meal Name" aria-describedby="basic-addon2"}}
  <span class="input-group-addon" id="basic-addon2"><button type="submit" class="btn-primary" {{action "submit" form on "submit"}}> Start Adding Food</button></span>
</div>

<div class="col-md-6 food-search-div">
  {{food-search}}
</div>

编辑2:

rails controller meal create action:

  def create
    # binding.pry
    @meal = current_user.meals.build(meal_params)

    if @meal.save
      render json: @meal, status: :created, location: @meal
    else
      render json: @meal.errors, status: :unprocessable_entity
    end
  end

求助:

删除我的膳食模型中的user: belongsTo('user'),以消除错误。

1 个答案:

答案 0 :(得分:1)

我认为问题出在这一行 - 路由器

return this.get('store').findAll('meal');

试试这个,但它应该有效吗

model() {
  return this.store.findAll('meal');
}

在内部控制器中,当你在路线内部时,你需要使用this.get('store')。尝试一下,让我知道它是否有效。同样在你的路线内设置动作以接受模型作为参数,如此

actions: {
  update(model){
    model.save().then( ....

这可以从像

这样的模板触发
<form {{action 'update' model on='submit'}} autocomplete="off">

通过这种方式,你不需要在你的路线中获得this.store - 你将传递一个模型,你可以去保存

希望有所帮助

编辑:这也会阻止ember cli预编译

user:belongsTo('user'),   // meal_items:hasMany('meal_item')

所以应该没有,

用户:belongsTo('用户')   // meal_items:hasMany('meal_item')