6

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) で、クライアントは、フォームから渡された正しい値を持つ req.body から作成されたプロパティ名を持っていますが、アクティブなプロパティはチェックボックスの状態を反映していません。

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 は false ではなく true になります。

4

2 に答える 2