2012-04-07 3 views
0

新しいレコードを作成して保存すると、Spine.jsモデルがサーバーにPOSTリクエストを送信して追加しますデータベースに転送します。 大したことはありません... 同じモデルインスタンスに別の.save()を発行すると、Spine.jsがデータを更新するだけのPUT要求を送信します。Spine.jsモデル:最初の.save()のみ新しいリソースを作成する必要があります。次のすべてを更新する必要があります

どうすればこの問題を解決できますか? (アクションを作成する)私は全体のオブジェクトを返す私のRailsのコントローラで

(@configureにidカラムを追加すると、いずれかの動作しません)

class App.MeetingMinutes extends Spine.Model 
    @configure 'MeetingMinutes', 'subject', 'some', 'more', 'attributes' 
    @belongsTo 'archive', 'Archive' 
    @extend Spine.Model.Ajax 

    @url: '#' # only dynamically scoped from Entries controller 

    @setArchive: (_id) -> 
    @url = '/archives/' + _id + '/meeting_minutes' 

これは私のモデルがどのように見えるかです

mm = new App.MeetingMinutes({subject: 'subject'}) 
mm.save() // POST 
mm.subject = 'changed subject!' 
mm.save() // another POST 

mm.isNew() // true (obviously :/) 
:JSON

format.json { render :json => @meeting_minutes, :status => :created } 

そして、それは私がそれを使用しているものだとして、

アイデア?

+1

あなたがそれを表現する方法は、それが私にとってどのように機能するかです。最初の保存後にモデル上でisNew()が返す値を確認できますか?これは誤っているはずです。それが本当であれば、別のPOSTを発行します。あなたのモデルにID列がありますか? – SpoBo

+0

あなたの返信ありがとう!私はちょうど私の投稿にいくつかの情報を追加しました。 – metafoo

+0

もし私があなただったら、最初の保存の前にデバッガを追加し、すべてのステップを実行します。 changeIDがspineで呼び出されて、mmレコードのIDをサーバー上で生成されたIDに設定する必要があります。それが起こると直ちに、レコードはもはやisNew()としてマークされません。ちょうどステップスルーし、それが起こるかどうかを確認してください。もしそうでなければ、なぜ。 – SpoBo

答えて

1

ソートされているかどうかわかりませんが、少し前に直面していた問題のように聞こえました。私はあなたが変数に保存割り当てする必要があると思うので、この:

mm = new App.MeetingMinutes({subject: 'subject'}) 
mm = mm.save() 
mm.subject = 'changed subject!' 
mm = mm.save() 

二保存は、PUTないPOSTでなければなりません。今私はこれが意図された使用法であるかどうかはっきりしていないが、それはうまくいくと思われる。それが役に立てば幸い。

関連する問題