在Ember中保存预订时,使用关系更新已存在的事件

时间:2016-02-05 20:04:08

标签: javascript node.js asynchronous ember.js exiftool

我有两种模式:

Event.js:

export default Model.extend({
  checked       : attr({ defaultValue: false }),
  isActive      : attr(),
  createdAt     : attr(),
  updatedAt     : attr(),
  start         : attr(),
  end           : attr(),
  menPrice      : attr(),
  womenPrice    : attr(),
  information   : attr(),
  meetingPoint  : attr(),
  title         : attr(),
  hiw           : attr(),
  tip           : attr(),
  bookings      : hasMany('booking', { async: true})
});

和Booking.js:

export default Model.extend({
  checked       : attr({ defaultValue: false }),
  isActive      : attr(),
  createdAt     : attr(),
  updatedAt     : attr(),
  participants  : attr(),
  email         : attr(),
  locale        : attr(),
  name          : attr(),
  observation   : attr(),
  phoneNumber   : attr(),
  event         : belongsTo('event')
});

我想在我的活动中创建关于预订的关系,但我无法弄清楚如何!

工作原理:当我在管理信息中心创建活动时,没有可供参考的预订,这只发生在网站上,当用户进行预订时。

我使用此代码保存预订(预订)并参考所有者活动:

let booking =  this.get('store').createRecord('booking', {
    event: this.get('event')
});

booking.save();

它正在发挥作用。这就是预订的样子:

这是我的预订JSON:

{
    "_id": {
        "$oid": "56beb58da080cf2c2d46065b"
    },
    "relationships": {
        "event": {
            "data": {
                "id": "56baa0cdd79cd63c7a0f0065",
                "type": "events"
            }
        }
    },
    "type": "bookings",
    "attributes": {
        "created-at": {
            "$date": "2016-02-13T04:48:13.489Z"
        },
        "gender": "null",
        "hostel": "null",
        "phone-number": "918918918118",
        "observation": "obs",
        "name": "Marcelo",
        "locale": "es",
        "email": "marcelo@pubcrawlsp.com",
        "participants": 10,
        "value": 0,
        "is-active": false,
        "vip": []
    },
    "__v": 0
}

正如您所看到的,这种关系正在与预订合作。

现在我需要相反,我的意思是..更新事件与预订里面..但我不能,我只是无法弄清楚如何!我至少坚持了3个星期。

我已经尝试了几件事,包括使用嵌入式选项,手动更新,但没有任何作用。

我很感激帮助!

2 个答案:

答案 0 :(得分:1)

这个问题已经很久了,但是无论如何我还是要给出答案。

Ember Data在更新请求中默认不序列化一对多关系的has-many站点。可以通过覆盖负责的序列化程序的shouldSerializeHasMany method来自定义。

请注意,默认情况下,Ember Data不会序列化一对多关系的许多部分,原因很可能会导致竞争状况和冲突。想象两个用户A和B正在同时从后端获取当前关系。 A添加新的相关记录。稍后,B通过用添加了一个资源的新列表替换现有关系来添加另一个相关记录。由于B不了解A添加的记录,因此它将被静默删除。 B会覆盖A的更改。

JSON:API规范支持关系链接以解决这些问题,即使对于多对多和多对无关系也是如此。但是对于多对一,仅更新一侧是最简单的解决方案。

答案 1 :(得分:0)

也许我错误地理解了这个问题,但实际上是否有必要在所有预订中保存这个事件?

我的意思是通常对于像这样的一对多关系,预订会有一个eventId指向他们相关的事件,但事件没有参考预订。保存对事件的更改应自动反映在引用该事件的所有预订中。