2013-03-30 8 views
6

Boolean değerini ekspres ve firavunlarla kaydetmenin kolay bir yolunu bulamıyorum. Bu şemayı var:Mongol kullanarak bir onay kutusundan boolean değeri nasıl kaydedilir ve ifade edilir?

var ClientSchema = new Schema({ 
    name: {type: String, required: true, trim: true}, 
    active: {type: Boolean } 
}); 

var Client = mongoose.mode('Client', ClientSchema); 

Bu benim kontrolörleri

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 }); 
    } 
    .... 
    }); 
}; 

Ve bu benim bakış

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) 

Gelincik req.body üzerinde params'ı haritasına kurma özelliğine sahiptir. Satır var client = new Client (req.body) satırında, istemci formdan geçirilen doğru değere sahip req.body'den oluşturulan özellik adına sahip olur, ancak özellik etkin onay kutusu durumunu yansıtmaz.

ben var istemcisi = new İstemci (req.body) sonra bu satırı ekleyerek bu sorunu çözebilir olduğunu biliyorum ama benim formları eklediğiniz her onay kutusu için bunu yapmak gerekir:

client.active = req.body.active == undefined ? false : true; 

Soru düzenlenmiş

Raylardaki yakut üzerinde bu numarayı yapmak zorunda değilim. Her onay kutusu için bir önceki satırı eklemeden onay kutularını nasıl kullanabilirim? Bu, onay kutularının değerlerini kaydetmenin tek yolu mı yoksa herhangi bir alternatif var mı? Ben şema bu şekilde

ben onay işaretini kaldırın eğer aktif doğru olacak kadar aktif, varsayılan olarak doğru olduğunu
var ClientSchema = new Schema({ 
    name: {type: String, required: true, trim: true}, 
    active: {type: Boolean, default: true } 
}); 

Not tanımlanır başka durum var

Düzenleme, yanlış değil. raylarda

+0

Sorunun ne olduğundan emin değilim - sadece "client.active ..." satırını başlatmak istemiyorsunuz? – UpTheCreek

+0

Raylardaki yakutlar üzerinde bu numarayı yapmama gerek yok. Ben onay kutularını kullanarak express.js ve Mongoose en iyi uygulama nedir bilmek istiyorum. Sorumu düzenledim. – Camilo

+1

Raylar üzerinde yakut ile karşılaştırıldığında, express.js çok düşük bir çerçevedir. RoR'un bu ekspresinin sizin için yapmayacağı pek çok şey olacak. Bu işlevi sizin için ekleyeceğiniz bir kütüphane ararken daha fazla şansınız olabilir (https://npmjs.org/ adresini deneyin).Ya da tam özellikli bir MVC stili web uygulaması çerçevesine (belki de eksprese dayanarak) bakmaya değer olabilir. Böyle bir seçenek bileşik.js (http://compoundjs.com/) – UpTheCreek

cevap

1

Yakut bir onay kutusu alanında yanında çıkış gizli bir alan olacak:

<input name="model_name[field_name]" type="hidden" value="false"> 
<input id="model_name_field_name" name="model_name[field_name]" type="checkbox" value="true"> 

Bu işaretli olmadığından onay kutularını sonrası verilerini göndermez gerçeği etrafında elde etmektir. Bununla ilgili daha fazla bilgi için Does <input type="checkbox" /> only post data if it's checked? adresine bakın.

Buradaki hile, RoR tarafından, gizli alan ve onay kutusu name özniteliği için aynı değere sahiptir. Onay kutusu işaretliyse, onay kutusu alanının değeri posta verileri olarak gönderilecektir, aksi halde gizli alanın değeri gönderilecektir.

Bu kesinlikle RoR sürüm 3.x böyleydi

bu 'Yakaladım' hakkında

fazla bilgi burada bulunabilir: http://apidock.com/rails/ActionView/Helpers/FormHelper/check_box

Sen düğüm uygulamasında bu tür bir şey uygulamak gerekir ya veya olduğunuz gibi undefined için kontrol edin.

İlgili konular