2011-09-02 4 views
2

나는 쿼리 캐싱 (query caching)으로 보이는 것 때문에 최근에 많은 두통을 겪었다.테스트에서 Active Record Query Caching을 비활성화하려면 어떻게합니까? 또는 재부팅 스마트를 사용 하시겠습니까?

많은 변수들이 내가 생각한 값을 가지고 있지 않은 것 같았고, 나는 'reload'를 사용해야한다는 것을 발견했습니다. 이제 '재로드'방식을 너무 자주 사용하여 DB에서 가장 최근의 데이터가 있는지 확인합니다.

정확히 'reload'를 사용해야 할 때 또는 완전히 캐싱을 비활성화해야합니까?

내 테스트 중 하나에서이 라인의 '새로 고침'비트없이 작동하지 않습니다 예를 들어

assert_equal @ fl1.reload.orig_price, @ #price이 리셋되어 fl1.lesson.reload.price 이전

저는 시험을 통과하는 것에 대한 믿음을 상실하기 시작합니다. 생각하고, 그렇습니다.하지만, 부패한 가치 때문에 지나가고 있다면 어떻게 될까요?

누구든지이 문제에 대해 의견을 개진 할 수 있습니까?

답변

-1

기본적으로 메모리에서 작업하는 경우 reload을 사용할 필요가 없습니다. 데이터베이스에 곧바로 간다면, 당신은해야 할 것입니다.

그래서, 일반적으로, 무엇인가 : 그 개체에 대한 모든 메모리에 있기 때문에

@user = User.create!(:name => "John Doe", :age => 100, :login => "jdoe") 
assert_equal "John Doe", @user.name 

잘 작동합니다. 이제

,의 당신이 같은 한 가정 해 봅시다 : 그 방법은 데이터베이스에 직접 이동

def contains_picture(path) 
    User.includes(:picture).where("pictures.locn = ?", path) 
end 

때문에 것 :

@user.pictures << Picture.create!(:locn => "/images/my_image.jpg") 
assert @user.contains_picture(/images/"my_image.jpg") 

및 그 방법, contains_picture을 같이 user.rb에 정의 그 그림을 찾지 못할 것이기 때문에 실패한다. 대신, .pictures 컬렉션에 사진을 추가 한 후, 당신은이에 따라, @user.save!

그래서해야 할 것이 무엇 객체에 무슨 일이 일어나고 어떤 방법 같은 모양을 사용하고, 당신이 reload 필요하면 그것이 당신을 말할 것이다 아닙니다.

관련 문제