我想不出一个简单的方法来用 express 和 mongoose 保存布尔值。我有这个架构:
var ClientSchema = new Schema({
name: {type: String, required: true, trim: true},
active: {type: Boolean }
});
var Client = mongoose.mode('Client', ClientSchema);
这是我的控制器
exports.new = function(req, res) {
var client = new Client();
res.render('clients/new', { item: client } );
};
exports.create = function(req, res) {
var client = new Client(req.body);
client.save(function(err, doc) {
if (err) {
res.render('clients/new', { item: client });
}
....
});
};
这是我的观点
form(method='post', action='/clients', enctype='application/x-www-form-urlencoded')
input(type='text', name='name', value=item.name)
input(type='checkbox', name='active', value=item.active)
Mongoose 能够映射 req.body 上的参数。在 var client = new Client(req.body) 行上,client 具有从 req.body 创建的属性名称,并具有从表单传递的正确值,但属性 active 不反映复选框状态。
我知道我可以在 var client = new Client(req.body) 之后添加这一行来解决这个问题,但我必须为我添加到表单中的每个复选框都这样做:
client.active = req.body.active == undefined ? false : true;
问题已编辑
我不需要在 ruby on rails 上做那个技巧。如何在不为每个复选框添加前一行的情况下使用复选框?这是从复选框中保存值的唯一方法,还是有其他选择?
编辑
我还有另一种以这种方式定义架构的情况
var ClientSchema = new Schema({
name: {type: String, required: true, trim: true},
active: {type: Boolean, default: true }
});
请注意,默认情况下 active 为 true,因此如果我取消选中该复选框,则 active 它将为 true,而不是 false。