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"
나는 이것을 디버깅하는 데 지난 시간을 보냈다 :). 초기 버전에서는 user
confirm_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
'IT Share you' 카테고리의 다른 글
VIM에서 SPACE를 메이플 레이더로 사용할 수 있습니까? (0) | 2020.12.03 |
---|---|
파이썬 인터프리터 오류, x는 인수를받지 않습니다 (주어진 1). (0) | 2020.12.03 |
Python의 시간대 이름에서 UTC 오프셋 가져 오기 (0) | 2020.12.03 |
부트 스트랩 초기 축소 요소 (0) | 2020.12.03 |
jquery가 데이터 속성 값을 가져올 수 없습니다. (0) | 2020.12.03 |