我的用户个人资料架构看起来像这样:
Schema.UserProfile = new SimpleSchema({
name: {
type: String,
optional: false
},
gender: {
type: String,
optional: false,
allowedValues: ['Male', 'Female']
},
location: {
type: String,
optional: false
},
age: {
type: Number,
optional: false
}
}
我的注册表格要求用户在其上选择性别。注册后,将向用户显示另一个表格以填写其余数据:姓名,地点和年龄。
问题在于:当用户尝试注册时,我收到错误:Name is required
。用户在注册之前不会输入他们的名字。
仅验证实际保存在特定表单上的数据的正确方法是什么?
修改
这是我的注册脚本:
var data = {};
var profile = {};
data.email = $('#email').val();
data.password = $('#password').val();
profile.gender = $('#gender').val();
data.profile = profile;
Accounts.createUser(data, function (error) {
// do
// ERROR: Name is required
});
当用户实际注册时,会向他们显示一个表单以填充其他数据。表单提交会调用尝试更新配置文件对象的方法。
答案 0 :(得分:0)
通过使用选项optional: false
,您在创建对象时必须使用它。
一种解决方案可能是myCollection.insert();
使用标记validate: false
而不是createUser()
。
e.g。
myCollection.insert(doc, {validate: false});
这不会触发错误,因为正在跳过验证。
我个人不会这样使用,但它可能是一种解决方案。
答案 1 :(得分:0)
您可以使用SimpleSchema的pick
命令从架构中选择某些元素。这样,您就可以拥有从同一原始模式定义派生的多个模式。
Schemas.UserProfileRegistration1 = Schemas.UserProfile.pick(['gender']);
Schemas.UserProfileRegistration2 = Schemas.UserProfile.pick(['name', 'location', 'age']);
https://github.com/aldeed/meteor-simple-schema#extracting-simpleschemas