私はブール値を急行とマングースで保存する簡単な方法を見つけられません。私はこのスキーマを持っている:mongooseとexpressを使用してチェックボックスからブール値を保存する方法は?
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)
マングースがreq.body上のparamsをマッピングする機能を持っています。 var client = new Client(req.body)の行では、クライアントはフォームから渡された正しい値を持つreq.bodyから作成されたプロパティ名を持っていますが、アクティブなプロパティはチェックボックスの状態を反映していません。
私はVARクライアント=新しいクライアント(req.body)の後に、この行を追加し、この問題を解決することができますが、私は私が私のフォームに追加したすべてのチェックボックスのためにそれを行う必要があることを知っている:
client.active = req.body.active == undefined ? false : true;
質問編集
私は、ルビーの上でそのトリックをする必要はありません。チェックボックスごとに前の行を追加せずにチェックボックスを使用するにはどうすればよいですか?これはチェックボックスから値を保存する唯一の方法ですか、それとも何か別の方法がありますか?
編集
私は、スキーマはアクティブがデフォルトでtrueであるので、私は、チェックボックスのチェックを外した場合、アクティブ、それは本当だろうことを、このよう
var ClientSchema = new Schema({
name: {type: String, required: true, trim: true},
active: {type: Boolean, default: true }
});
注定義されている別のケースを持っています偽ではありません。レール上
私はあなたの質問が何であるか分かりません - あなたは 'client.active ...'を開始する行を望んでいません。 – UpTheCreek
ruby on railで私はそのトリックをする必要はありません。私はexpress.jsとmongooseのベストプラクティスがチェックボックスを使って何かを知りたいです。私は私の質問を編集しました。 – Camilo
ruby on railと比較して、express.jsは非常に最小限のフレームワークです。 RoRがあなたのためにしないことがたくさんあることがあります。その機能を追加するライブラリを探しているほうが、もっと幸運かもしれません(https://npmjs.org/を試してみてください)。あるいは、完全な機能を備えたMVCスタイルのWebアプリケーションフレームワーク(おそらく急行に基づく)を検討する価値があるかもしれません。このようなオプションの1つは、compound.js(http://compoundjs.com/)です。 – UpTheCreek