2013-03-30 4 views
6

私はブール値を急行とマングースで保存する簡単な方法を見つけられません。私はこのスキーマを持っている: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 } 
}); 

注定義されている別のケースを持っています偽ではありません。レール上

+0

私はあなたの質問が何であるか分かりません - あなたは 'client.active ...'を開始する行を望んでいません。 – UpTheCreek

+0

ruby​​ on railで私はそのトリックをする必要はありません。私はexpress.jsとmongooseのベストプラクティスがチェックボックスを使って何かを知りたいです。私は私の質問を編集しました。 – Camilo

+1

ruby​​ on railと比較して、express.jsは非常に最小限のフレームワークです。 RoRがあなたのためにしないことがたくさんあることがあります。その機能を追加するライブラリを探しているほうが、もっと幸運かもしれません(https://npmjs.org/を試してみてください)。あるいは、完全な機能を備えたMVCスタイルのWebアプリケーションフレームワーク(おそらく急行に基づく)を検討する価値があるかもしれません。このようなオプションの1つは、compound.js(http://compoundjs.com/)です。 – UpTheCreek

答えて

1

Rubyはチェックボックスフィールドの横の出力隠しフィールドをします:

<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"> 

これはチェックされないのチェックボックスがPOSTデータを送信していないという事実を回避することです。詳細については、Does <input type="checkbox" /> only post data if it's checked?を参照してください。

ここでは、RoRのトリックは隠しフィールドであり、チェックボックスはname属性の値と同じです。チェックボックスをオンにすると、チェックボックスフィールドの値がポストデータとして送信されます。それ以外の場合は、非表示フィールドの値が送信されます。 http://apidock.com/rails/ActionView/Helpers/FormHelper/check_box

あなたのノード・アプリケーションではこの種のものを実装する必要があります次のいずれか

これは確かにRoRのバージョン3.xでの場合、この「落とし穴」について

詳しい情報はここで見つけることができましたあなたが行ったようにundefinedをチェックしてください。

関連する問題