我不能想象一個簡單的方法來保存一個布爾值與快遞和貓鼬。我有這樣的模式:如何使用貓鼬和表達式從複選框保存布爾值?
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)
貓鼬具有對PARAMS上req.body地圖的能力。在var client = new Client(req.body)行上,客戶端具有從req.body創建的屬性名稱,並從表單傳遞了正確的值,但屬性active並未反映複選框狀態。
我知道我可以解決這個問題,增加無功客戶端=新的客戶端(req.body)後,這條線,但我必須爲每一個複選框,我添加到我的方式做到這一點:
client.active = req.body.active == undefined ? false : true;
問題編輯
我不需要在軌道上的紅寶石做那個技巧。如何在不爲每個複選框添加上一行的情況下使用複選框?這是從複選框保存值的唯一方法,還是有其他選擇嗎?
編輯
我這裏的模式是這樣定義的
var ClientSchema = new Schema({
name: {type: String, required: true, trim: true},
active: {type: Boolean, default: true }
});
請注意,Active默認爲true,所以如果我取消選中該複選框,活動將是真正的另一起案件中,不是假的。
我不確定你的問題是什麼 - 你只是不想讓行開始'client.active ...'? – UpTheCreek
在軌道上的紅寶石,我不需要那樣做。我想知道使用複選框在express.js和mongoose上的最佳做法。我編輯了我的問題。 – Camilo
與軌道上的ruby相比,express.js是一個極其微小的框架。 RoR所做的很多事情不會爲你做。你可能有更多的運氣搜索一個庫,它會爲你添加這個功能(嘗試https://npmjs.org/)。或者可能值得一看全功能的MVC風格的Web應用程序框架(可能基於快車)。其中一個選項是compound.js(http://compoundjs.com/) – UpTheCreek