Ich kann keinen einfachen Weg finden, um einen booleschen Wert mit Express und Mungo zu speichern. Ich habe dieses Schema:Wie speichert man einen booleschen Wert aus einem Kontrollkästchen mit Mungo und Express?
var ClientSchema = new Schema({
name: {type: String, required: true, trim: true},
active: {type: Boolean }
});
var Client = mongoose.mode('Client', ClientSchema);
Das ist mein Controller
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 });
}
....
});
};
Und das ist meine Ansicht
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 hat die Fähigkeit, die params auf req.body abzubilden. In der Zeile var client = new Client (req.body) hat der Client den Eigenschaftsnamen aus req.body mit dem korrekten Wert aus dem Formular erstellt, aber die Eigenschaft active gibt den Status des Kontrollkästchens nicht wieder.
Ich weiß, dass ich dieses Problem lösen kann diese Zeile nach var Client Hinzufügen = new Client (req.body), aber ich muss es tun, für jedes Kontrollkästchen ich meine Formen hinzufügen:
client.active = req.body.active == undefined ? false : true;
Frage bearbeitet
Ich brauche diesen Trick auf Ruby on Rails nicht zu tun. Wie kann ich Kontrollkästchen verwenden, ohne die vorherige Zeile für jedes Kontrollkästchen hinzuzufügen? Nur so können Werte aus Checkboxen gespeichert werden oder gibt es Alternativen?
bearbeiten
ich einen anderen Fall, wo das Schema auf diese Weise definiert ist
var ClientSchema = new Schema({
name: {type: String, required: true, trim: true},
active: {type: Boolean, default: true }
});
Beachten Sie, dass standardmäßig aktiv wahr ist, also wenn ich das Kontrollkästchen deaktivieren, aktiv es wahr sein, nicht falsch.
Ich bin mir nicht sicher, was Ihre Frage ist - Sie wollen einfach nicht die Zeile "client.active ..." starten lassen? – UpTheCreek
Auf Rubin auf Schienen muss ich diesen Trick nicht machen. Ich möchte wissen, was ist die beste Praxis auf express.js und Mungo mit Kontrollkästchen. Ich habe meine Frage bearbeitet. – Camilo
Im Vergleich zu Ruby on Rails ist express.js ein extrem minimaler Rahmen. Es wird viele Dinge geben, die RoR tut, die Ihnen nicht gut tun. Möglicherweise haben Sie mehr Glück bei der Suche nach einer Bibliothek, die diese Funktionalität für Sie hinzufügen wird (versuchen Sie es mit https://npmjs.org/).Oder es lohnt sich, ein voll funktionsfähiges Web-App-Framework im MVC-Stil zu betrachten (vielleicht auf der Grundlage von Express). Eine solche Option ist compound.js (http://compoundjs.com/) – UpTheCreek