2016-08-25 4 views
2

予想される動作更新しない自動:首尾.update()を使用してレコードを更新した後Sails.jsモデルupdatedAt(updated_atの)

を、レコードのupdated_atフィールドべき現在の時刻に自動更新が。

注:フィールドがupdated_at代わりにupdatedAtと題されているので、私はconfig.modelsにautoUpdatedAt: 'updated_at'を使用して(もhere言及)autoUpdatedAt設定を変更しました。それは私が想定しているのと同じ機能をまだ持っているはずです。

実際の動作:

モデルが正常に更新されますが、それはupdated_atフィールドを更新しません。

コードを実行します:

model.update(primary, data) 
.then(function updateCB(updated){ 
    // error handling 
    sails.log('Updated successfully'); 
    sails.log(updated); 
}); 

質問:

  • これはなぜですか?
  • これを修正するにはどうすればよいですか?

結果:帆

のための問題は、私はそれは帆に問題がありますように見えるので、新しいプロジェクトでそれを再現することができました。問題のリンク:https://github.com/balderdashy/sails/issues/3821

詳細は以下の回答を参照してください。

+0

モデルファイル内で 'updated_at'属性がどのように見えるかを表示できますか? – Ryan

+0

これはモデルファイルの属性ではありません。 autoUpdatedAt属性の名前を変更するためのセイルレベルのコマンドです。ノート内でリンクしました。 – smileham

+0

ああ、あなたの問題があります:) – Ryan

答えて

4

私は同じ理由で同じことを試してみましたが、同じ問題を抱えていました。それを修正する方法については -

私はそれ私はそれを望んでいたので、同じようにそれを記入した任意のモデルのための私のモデルファイル内の属性製:

updated_at:{ 
     type: 'datetime', 
     defaultsTo: function(){return new Date();} 
    } 

を私のDBの列で(MySQLでこの場合)はNOT NULLDATETIMEに設定され、CURRENT_TIMESTAMP on UPDATEに更新されます。

あなたは自分の更新呼び出しの前に、あなたのDBへのアクセスを持っていない場合は、コードでこれを置くことができます。

data.updated_at = new Date(); 
model.update(primary,data).... 

同じことを実現すること。

これは私が思い付くことができる最も簡単な方法です。

私はこれについて考えるようになったと私は第三の選択肢、そのように書かモデル方法を思い付いた:限り、私は帆を伝えることができるようerrorを期待するので、最初の位置にnullがある

attributes:{ 
    //stuffs 
}, 
beforeUpdate: function(obj, next){ 
    obj.updated_at = new Date(); 
    return next(null, obj); 
} 

コールチェーン全体のオブジェクトなので、私はそれに沿って何も渡さなかった場合、すべてがうまくいきました。

+0

更新することは確実ですか?作成時にデフォルトに設定されるので、 'created_at'でも動作しますが、更新についてはわかりません。明らかに私は設定ソリューションを好むだろうが、帆がそれを修正するまで、私は手動のソリューションに門戸を開いている。 – smileham

+0

@smileham、oh opps、私はステップを忘れました、これを処理する2つの方法があります。私は私のプロジェクトを完全に制御しているので、私はdbレベルでそれをやったのですが、あなたは私の編集を見るだけでなく、コードでそれを行うことができます。 – Ryan

+0

Gotcha。しかし、更新するとき、 'updated_at'は値を変更しますか?すでに作成された時点からの価値があります。 – smileham

0

結果:帆

のための問題は、私は新しいプロジェクトでそれを再現することができたので、それは帆に問題がありますように見えます。問題リンク:https://github.com/balderdashy/sails/issues/3821

コードを実行します:

Test.create() 
.then(function(created){ 
    sails.log('created'); 
    sails.log(created); 

    Test.update(created, {}) 
    .then(function(updated){ 
     sails.log('updated'); 
     sails.log(updated[0]); 

     Test.findOne(updated) 
     .then(function(found){ 
      sails.log('found'); 
      sails.log(found); 

      res.end(); 
     }); 
    }); 
}); 

コード結果:帆はまだ私のSQLデータベースに保存されていないupdatedAtフィールドを追加しているよう

debug: created 
debug: { createdAt: '2016-08-25T21:35:46.679Z', 
    updated_at: '2016-08-25T21:35:46.679Z', 
    id: 1 } 
debug: updated 
debug: { createdAt: '2016-08-25T21:35:46.679Z', 
    updated_at: '2016-08-25T21:35:46.679Z', 
    id: 1, 
    updatedAt: '2016-08-25T21:35:46.698Z' } 
debug: found 
debug: { createdAt: '2016-08-25T21:35:46.679Z', 
    updated_at: '2016-08-25T21:35:46.679Z', 
    id: 1, 
    updatedAt: '2016-08-25T21:35:46.698Z' } 

が見えます。

関連する問題