【问题标题】:Model hook throwing error. Ember模型钩子抛出错误。余烬
【发布时间】:2016-06-16 18:39:40
【问题描述】:

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

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 控制器餐创建动作:

  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'), 以消除错误。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

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

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

    试试这个,但它应该工作很奇怪

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

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

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

    这可以从这样的模板触发

    <form {{action 'update' model on='submit'}} autocomplete="off">
    

    这样你就不需要在你的路由中获取 this.store - 你将有一个模型通过,你可以去保存

    希望对你有帮助

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

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

    所以应该没有,

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

    【讨论】:

    • 仍然收到同样的错误...不知道该怎么办。我已经搜索过过去的问题。
    • 如何传递此数据 createMeal(data) {...显示触发数据的代码...查看我更新的答案并编辑代码,以便在 createMeal 中直接传递模型
    • 在你编辑动作之前,让我们在你的路线中尝试这个 createMeal 只是为了测试 let meal = this.get('store').createRecord('meal'); meal.save() 在我仔细查看组件之前,我想确保您能够创建记录。所以尽量不要使用使用参数数据,而是在模型名称后传入硬编码值
    • 你在服务器端使用 rails 吗?对?创建记录后,是否返回该记录的 json?所以它需要做类似饭 = Meal.create()...然后渲染 json:meal status: :created...你需要将创建的记录返回给 ember。请贴出餐点def创建方法的代码
    猜你喜欢
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2021-12-14
    • 2020-08-20
    • 2017-09-28
    相关资源
    最近更新 更多