2010-02-03 2 views
1

동일한 모델 레일에 여러 동시 편집기가있을 때 버전 충돌을 처리하는 방법은 무엇입니까? 가와 포스트 컨트롤러의 예를 유저 (A)를 클릭 편집에 대한 포스트 컨트롤러의 내용 사용자 B를 클릭 편집 편집을 시작하고 사용자 B가 완료 제목 편집을 시작하고 사용자 A가 이루어집니다 을 저장을 클릭하고 저장을 클릭하고를 오버라이드 (override) 사용자 B가 수행 한 수정같은 모델 레일에 여러 동시 편집기가있는 경우 핸들 버전 충돌

방지 할 수 있습니까? updated_at 필드를 사용하여 편집 된 버전이 마지막인지 확인합니다. 그 플러그인이나 보석은 어떻게해야합니까 ??

+0

나는 updated_at 값을 제출하고 모델을 업데이트하기 전에 그것을 비교하는 것이 보석 추가에 비해 좋은 절충이라고 생각합니다. 다른 경우; 수동으로 병합 할 사용자의 차이점을 보여줍니다. – gamov

답변

1

당신이 찾고있는 것은 ActiveRecord에 대한 개정 제어 또는 버전 제어 시스템입니다. The Ruby Toolbox indexes several of them. laserlemon의 vestal_versions은 마치 일을 끝내는 것처럼 보입니다. 버전 - 충돌을 상자 밖으로 처리하는 경우 확실하지 않지만 포크 및 일부 편집을 수행 할 수 있습니다.

+0

Ruby Toolbox에 대한 링크가 업데이트되었습니다. https://www.ruby-toolbox.com/categories/Active_Record_Versioning – RocketR

+0

감사합니다. 답변을 업데이트했습니다. –

1

필자는 모델에서보기까지 모든 것을 다루는 등 직접적으로이를 처리하는 플러그인이나 보석을 모르고 있으며 gemcutter.org 및 agilewebdevelopment.com에서 플러그인을 사용할 수 없음을 간략히 조사했습니다. .

아주 잘 관리하는 프로그램 및 패키지는 Google Wave입니다.

하지만 (이것은 거의 확실하지 않습니다 같은) 그 옵션이 아니라면, 여기가 당신을 얻을 수 있습니다 빠르고 아주 간단한 아이디어 :

  1. 라는 '수정'보기에 필드 추가하기 "requested_at"

  2. 편집에 대한 '업데이트'를 받으면 "requested_at"양식 필드 값이 저장된 개체의 "updated_at"값보다 작은 지 확인하십시오.

  3. 만약 그렇다면 사용자에게 가능한 충돌을 경고하는 응답을 브라우저에 보내십시오. 사용자가 제출 한 데이터와 저장된 객체의 현재 상태 사이에 차이점을 표시 할 수도 있습니다. 이 '사랑하는'표시를 위해 나는 gemcutter에서 사용할 수있는 DIFF-LCS 라이브러리를 권장합니다 : 사용자보기 후 http://gemcutter.org/gems/diff-lcs

  4. 와 그의 subimssion, 씻어 반복 (또는 그 (것)들에게 기존의 변화를 오버라이드 (override) 할 수있는 옵션을 제공 개정 할 경우에도 다른 사람 텍스트를 편집했습니다.)

는 답은 아래에 active_record 모델의 버전의 사용을 언급하고, 그것을 위해 당신은 (적어도 그게 내 마음에 드는입니다) ActsAsAudited를 시도해 볼 수도 있습니다 ...하지만 그건 당신이 설명 된 문제입니다 확실하지 않다.

+1

정확히 내가 무슨 말을하려고했는지. 당신은 또한 StackOverFlow와 같은 것을 할 수 있습니다 - 업데이트를 폴링하고 게시물이 수정되면 사용자에게 경고하기 위해 클라이언트 측에 javascript를 추가하십시오. – klochner

+0

오른쪽에 .... JS를 사용하여 업데이트를 폴링하는 것이 좋습니다. – btelles