1

これはばかげた質問かもしれませんが、2 人のユーザーが一度にデータを編集し、両方が同時に送信をクリックするとどうなるかを知りたかったのです。これは正しいですか?

ありがとう

1 人のユーザーがデータを編集したら、それ以上アクセスしたり編集したりしたくありません。これは検証によって処理されます。

私のモデルでもこの​​検証を受けました

def account_active
    if self.active == true
      return true
    else
      return false
    end
end

検証に合格した場合、アクティブな場所はコントローラー内のブール値セットです

4

4 に答える 4

2

他の回答で述べたように、最新の書き込みが優先されます。

これが問題だとは思わないかもしれませんが、2 人のユーザーが同じ編集フォームを同時に開くことを防止する悲観的なロックがないため、両方のユーザーが行っている変更が保存されると考える可能性があります。

これを回避するには、モデルでバージョン番号またはタイムスタンプを使用して、システムが「ユーザーはバージョン 1 を編集していましたが、現在はバージョン 2 です」と伝え、2 番目のユーザーが最初のユーザーの書き込みをオーバーライドするのを防ぎます。

Ryan Bates のすばらしい Railscasts シリーズでは、 Railscast 59: Optimistic Lockingでこれを設定する方法の基本を取り上げました。

于 2010-06-11T23:30:54.770 に答える
1

Webサーバーデーモンはリクエストを次々に処理します。最後に処理されたリクエストが最新のアップデートになります。このような場合を処理するロジックを記述しない限り、エラーメッセージは表示されません。

于 2010-06-11T23:00:07.497 に答える
0

ブラインド書き込みを含むすべての競合状態と同様に、それを変更するための手順を実行しない限り、最後の1つが勝ちます。

于 2010-06-11T22:58:02.897 に答える
0

あなたの元の質問は答えられました、しかし私はこれを追加します:

検証のために、あなたは単に以下を行うことができます

def account_active
  self.active?
end

Rubyは、メソッドの最後の行を暗黙的に返します。

于 2010-06-11T23:35:36.787 に答える