5204


たとえばCounterというmodelを

[code]

    module.exports = {
      attributes = {
        count: 'INT'
      }
    }
    
[/code]

として用意して、

[code]

    Counter.create({count: 10})
    
[/code]

を実行すると、

[code]

    { count: 10,
      createdAt: Sat Jan 24 2014 17:12:18 GMT+0900 (JST),
      updatedAt: Sat Jan 24 2014 17:12:18 GMT+0900 (JST),
      id: 1 }
    
[/code]

のようなmodelが作成され、

[code]

    Counter.update({id: 1},{count: 11})
    
[/code]

を実行すれば、上のmodelのcountを11に変更することができますが、  
これを値を確認せずにインクリメントする方法はないのでしょうか？


CC BY-SA 3.0
2015-01-24T08:27:47.127
5197
2015-01-26T08:53:28.740
1002
question
node.js sails.js
Sails.jsのmodelのintな値をインクリメントしたい


**追記: 前回のコード、コールバック指定していないところがあったので、更新しました。すいません (1/26)**

モデルにクラスメソッドを定義して呼び出してやるのが良い。

_models/Counter.js_

[code]

    module.exports = {
      attributes: {
        count: 'INT'
      },
      increment_count: function( query, cb) {
        Counter.findOne(query).exec(function(err, res) {
          Counter.update(query,{count: ++res.count}).exec( cb);
        });
      },
    };
    
[/code]

_controllers/CounterController.js_

[code]

    module.exports = {
      init: function (req, res) {
        Counter.findOne(1).exec(function(err, cnt) {
          if (err) {
            res.send("error")
            return;
          }
          if ( cnt) {
            cnt.count = 0;
            Counter.update(1, cnt).exec(function(err, newCnt) {
              res.send("Counter has been reset.");
            });
          } else {
            Counter.create({id:1, count: 10}).exec(function(err, newCnt){
              res.send("new Counter has been created.");
            });
          }
        })
      },
    
      increment: function (req, res) {
        # {id:1} のカウンタを 1 上げる
        Counter.increment_count(1, function( err, cnt) {
          return res.send( cnt);
        });
      }
    };
    
[/code]

  * <http://localhost:1337/counter/init> にアクセスでカウンタ初期化
  * <http://localhost:1337/counter/increment> にアクセスでカウントアップ


CC BY-SA 3.0
2015-01-24T11:17:50.743
5204
2015-01-26T08:53:28.740
2015-01-26T08:53:28.740
4978
4978
5197
answer