2014-02-21 3 views
0

ActiveRecord에 대해 명확히 설명하고 싶습니다. 다음과 같은 시나리오가 있다고 가정 해 보겠습니다.유효성 검사에서 ActiveRecord 경쟁 조건

이제 기존 Song 인스턴스가 있고이를 업데이트하려고합니다. 여기서 경쟁 조건이 있지 않습니까? 특히 :

  1. 실행 노래 검증, 모든
  2. 내가가 발생하지 않도록하려면 어떻게 노래의 구매를 만들고

을 dB로

  • 저장 노래를 dB로 저장 통과? 구매가 has_many이기 때문에이 시나리오에서 잠금을 사용하는 방법을 모르겠습니다.

    감사합니다.

  • +0

    "경쟁 조건"이란 무엇입니까? – MrYoshiji

    +0

    "경쟁 조건"은 두 프로세스가 개별적으로 발생하는 상황이며 어느 것이 먼저 발생할지 모르기 때문에 예측할 수없는 결과가 발생합니다. 나는 이것이 경쟁 조건의 사례라고 생각하지 않는다. –

    +0

    노래 유효성 검사가 통과 된 후 노래가 DB에서 실제로 업데이트되기 전에이 노래에 대한 구매가 수행되지 않습니까? 특히 self.purchases의 값은 유효성 검사에서 호출 된 후에 변경 될 수 있습니다. 권리? – deruse

    답변

    0

    구매가 구매 모델에 영향을 미치고 노래의 업데이트가 노래 모델에 영향을줍니다.
    ActiveRecord는 이러한 모델을 데이터베이스의 개별 테이블에 매핑하므로 개별적으로 액세스하는 것과 관련된 '경쟁 조건'이 없습니다.

    그러나 노래를 삭제할 경우 구매 한 항목에 오류가 발생할 것입니다. 업데이트 대상이 아닌 해당 시나리오를 대상으로 지정하십시오.

    또한 표준이어야하지만 노래의 기본 키는 업데이트하지 마십시오.