当在Ember中保存预订时,如何更新已经存在的事件关系?

16

我有两个模型:

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
}

正如您所看到的,这个关系正在与预订一起使用。

现在我需要相反的,也就是说..更新带有预订信息的事件..但我不行,我无法弄清楚该怎么做!我至少卡在这个问题上三个星期了。

我已经尝试过几种方法,包括使用嵌入选项、手动更新,但都无效。

感谢您的帮助!


你将需要使用回调函数或者 Promises。我建议你阅读这篇文章 :) https://strongloop.com/strongblog/promises-in-node-js-with-q-an-alternative-to-callbacks/ - phenxd
为什么这个问题标记了JavaScript,你认为解决方案可以用JavaScript实现吗? - Rajshekar Reddy
显然,我正在使用Node.js。 - user5526811
更新带有预订的事件是什么意思?预订的更改会反映在事件中吗?如果是这样,那么这将如何发生,而且您还没有创建此关系? - ProllyGeek
这个问题上的exiftool标签似乎放错了位置。 - StarGeek
也许我没有理解问题,但实际上保存所有预订的事件是否有意义? - Nazim
2个回答

1
这个问题很老了,但还是让我来回答一下,因为它的赞数很高。Ember Data默认情况下不会在更新请求中序列化一对多关系的has-many站点。可以通过覆盖负责序列化的serializer的shouldSerializeHasMany方法进行自定义。请注意,Ember Data默认情况下不会序列化一对多关系的many部分,因为这可能会导致竞争条件和冲突。想象两个用户A和B同时从后端获取当前关系。A添加了一个新的相关记录。稍后,B通过用新列表替换现有关系并添加一个资源来添加另一个相关记录。由于B不知道A添加的记录,所以它将被静默删除。B覆盖了A的更改。JSON:API规范支持关系链接以解决这些问题,即使是多对多和多对无关系的关系也是如此。但对于多对一,只更新一侧是最简单的解决方案。

0
也许我误解了问题,但实际上保存所有预订的事件有意义吗?
我的意思是,通常对于这种一对多的关系,预订将具有指向它们相关联的事件的eventId,但事件不会保留对预订的引用。在事件上保存更改应自动反映在所有引用它的预订上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接