または:アクティブレコードで何を使用するかを決定する方法update
またはinsert
?アクティブなレコードに、新しいレコードを挿入するのではなく、新しいレコードをdup(ing)した後に更新する方法を教えてください。
私は鍵としてUUIDを使用しています。
新しいオブジェクトのUUIDクライアント側を生成して、server/dbとの非同期処理を許可します。
例:ユーザーは図面に新しい三角形を追加し、このオブジェクトセットを作成してuuid(AAAと言うことができます)をエディタに配置し、さらに作業できます。それから私はサーバーに更新を送信します。したがって、ユーザーはRTTを待つ必要はありません。
ユーザーが、私はそれを描く、緑の三角形を埋める - > AJAXサーバーに(更新(AAA))
使用は緑色の三角形のコピーを作成し、私はオブジェクトが新しいUUIDを設定して送信コピー
ユーザーヒットを元に戻すBBBするAJAXコピーAAA - BBBを削除する(しかし、そのそのちょうど私のアプリで標準として削除のマークが付けられ、削除されません)AJAXを送って描画からBBBを削除
ユーザーヒットはやり直し - > Iオブジェクトをコピーして新しいUUID(BBBをもう一度)を設定し、AJAXコピーAAAをBBBに送信
BANG私は、DUPを作るのIDを設定し、
new_rec=old_rec.dup
new_rec.id=new_id #BBB
new_rec.save (BANG because insert)
を保存するキー
サーバー側を複製だから私は必要なものの回避策があることを、私は知っている
new_rec=old_rec.dup
new_rec.id=new_id #BBB
new_rec.set_method_to_update if Record.exist?(new_id)
new_rec.save (BANG because insert)
のようなものですが、簡単な方法が可能ですか?
私はそうUUID IDに移行することを決定し、それは野生と醜いだ、私は前にした(同期の一時キーを使用してトラブルを持っていないUUIDを使用します)。元に戻す/やり直しのために重複したエントリが「発生」し、DB内のレコードを直接削除することはできません。 – halfbit