在Sails.js中从另一个资源的创建触发创建一个资源

时间:2014-04-17 22:42:24

标签: node.js sails.js

如果对post进行了/user,并且我的数据模型说用户必须拥有group,那么在成功创建user后,如何我触发了在sails.js中创建的新group?就此而言,我如何通过afterCreate等生命周期回调或其他方式进入另一个控制器?

2 个答案:

答案 0 :(得分:1)

您无法调用模型中的控制器,这会违反MVC模式。您可以通过

创建群组
Group.create(obj)

或将您的创建逻辑放在服务中。

答案 1 :(得分:1)

听起来你可能会混淆模型和控制器,如果你因为它提供的蓝图功能而成为Sails的新手,这很容易做到。也就是说:您不需要GroupController来创建Group模型实例,而GroupController.create 是创建新实例的正确方法Group以编程方式。 GroupController.createPOST/group时自动调用的方法,因为Sails已设置了"蓝图"在该位置创建行动。

以编程方式创建Group的正确方法是使用create模型类的Group方法,该方法在Sails应用程序中全局可用。因此,在您的afterCreate中,您可以:

afterCreate: function(values, cb) {
    Group.create({user: values.id}).exec(cb);
}

请注意,最新版本的Sails(v0.10.0-rc5)支持嵌套创建,因此如果您已将UserGroup定义为彼此associated ,你可以POST这样的/user

{
    name: "Joe Blow",
    age: 25,
    group: {
       name: "Joe's group"
    }
}

将自动创建组并与用户关联。如果您POST使用主键嵌入Group,则会搜索包含该键的现有组,并将其链接到新User,而不是创建新的Group