작업 일이 소요되었습니다.컨트롤러에서 ActiveRecord 연결을 다시로드 할 수 없습니다.
나는
class Box
has_many :users, :through => :subscriptions
end
내가 신속하게 자신의 일을 여러 INSERT를 사용하는 사용자 정의 insert_new_users
및 associate_with(new_users)
방법이 있습니다. 어쨌든, 그들은 잘 작동합니다. 또한 "associate_with"방법의 끝 부분에이 라인을 가지고 :
def associate_with
# mysql INSERT here
self.users(true) # Should force reload
end
이 테스트 환경 (모두 컨트롤러와 모델 테스트)에서 실행할 때 예상대로 작동과 내가 true
인수를 제거하면 예상대로 실패하는 강제로 다시로드합니다. 또한 script/console
에서 개발중인 경우 update_attributes
모델에서 작동합니다. 그러나 컨트롤러에서 update_attributes
을 시도 할 때 개발 또는 생산에 실패합니다. 연관을 다시로드하지 않고이 쿼리에 대해 "CACHE (0.0ms)"라고 표시된 로그에서 볼 수 있습니다.
이상한 일 - 전에는 효과가 있었지만 어떤 이유로 인해 작동이 멈춘 순간을 확인할 수 없습니다. 나는 누군가 이것이 이것을 어떻게 가능하게 하는지를 아마 알고 있기를 바랬다.
모델 내부에서 호출 할 때 불행히도 'uncached'라는 정의되지 않은 메서드가 있다고합니다. – snitko
잘 잡습니다. 인스턴스 메소드가 아니라 클래스 메소드입니다. 내 대답에 그 범위를 수정했습니다. –
그러면 Rails에 버그가 있습니까? 재로드를 호출하는 것이 실제로 재로드되어야하는 것처럼 보입니다. SQL 쿼리 캐시는 데이터베이스가 실제로 변경되지 않았다는 것을 알기에 충분히 똑똑 할 수도 있지만 가능합니다. 어떤 경우에, 이것은 정말로 걱정할 사항이 아닙니다. –