IT Share you

Rails에서 내 모델 객체를 "새로 고침"할 때를 어떻게 알 수 있습니까?

shareyou 2020. 12. 3. 20:51
반응형

Rails에서 내 모델 객체를 "새로 고침"할 때를 어떻게 알 수 있습니까?


내가 가지고있는 통합 테스트의 일부는 다음과 같습니다.

user = User.first
assert !user.is_active?

get confirm_email_user_url(user),:confirmId => user.mail_confirmation_hash

assert_equal response.status,200
# because confirm_email_user_url modifies the activation state of the object
user = User.first
assert_equal user.state,"activated"

나는 이것을 디버깅하는 데 지난 시간을 보냈다 :). 초기 버전에서는 userconfirm_email_user_url에 액세스 한 후 다시 초기화하지 않았 inactive으며 사용자가 활성화 된 경우에도 상태가 항상 유지되었습니다.

모델 객체를 "다시로드"(더 나은 이름이 없음)해야하는지 어떻게 알 수 있습니까? 그렇게하려면 무엇을 전화해야합니까?


user.reload데이터베이스에서 데이터가 변경 될 때마다 호출해야 합니다.

위의 코드에서 "user"객체는에서 데이터베이스에서 가져온 데이터에서 메모리에 생성됩니다 User.first. 그런 다음 데이터베이스를confirm_email_user_url 수정하는 것처럼 보입니다 . 개체는 데이터베이스에서 데이터를 다시 획득 할 때까지 이것에 대해 알지 못합니다 .reload

개체를 다시로드해야하는시기를 알 수있는 프로그래밍 방식이 있는지 확실하지 않지만 개발자는 진행 상황을 인식하고 적절하게 처리해야합니다. 내 경험의 대부분 (다소 제한적 임)에서 이것은 테스트 중에 만 문제가됩니다. 프로덕션에서는 개체가 메모리에로드되는 동안 데이터베이스에서 수정되는 것이 일반적이지 않습니다. 무엇 일반적으로 발생하는 메모리의 개체를 수정 한 다음 데이터베이스 (즉, 저장된다 user.email = "foo@bar.com"다음 user.save). 많은 사용자가 짧은 시간에 무언가를 수정하는 활동이 많은 애플리케이션이 있다면 조심해야 할 것입니다.


Btw. .NET과 같은 모델 자체에서 작업을 수행 할 때는 실제로 작동하지 않습니다 Report.count. 열 정보를 재설정하거나 첫 번째 / 마지막 레코드의 인스턴스를 가져 와서 다시로드하려는 끝없는 시도 후에 다음과 같이 카운트간에 데이터베이스를 다시 연결하는 데 도움이 된 유일한 방법은 다음과 같습니다.

initial_count = Report.count

# do something, like invoking a rake task that imports the reports, ..

Report.connection.reconnect!
final_count = Report.count

이것은 Rails 2.3.8+에서 작동했지만 3+ 버전에 대해서는 모릅니다.

참고 URL : https://stackoverflow.com/questions/5519741/how-can-i-know-when-to-refresh-my-model-object-in-rails

반응형