문제

이미지를 첨부 한 멋진 작은 "사진"클래스가 있습니다. 사진의 순서를 정렬하기 위해 페이지로 이동하면 각 사진을 반복하고 새로운 "정렬"값을 설정하고 저장합니다. 지금까지 모두 좋은.

문제는이 동작이 상당히 느리다는 것을 알았습니다. autchment_fu는 작업 할 새로운 이미지 데이터가 있는지 여부에 관계없이 모든 저장에서 축소판을 다시로드합니다.

분명히이 시스템은 잘 고려 되었으므로이 상황에 대한 조항이 존재한다고 가정해야합니다. 적절하지 않은 경우 atchment_fu에게 썸네일을 재생하지 말라고 어떻게 말합니까?

감사, -Matchu

편집하다: 방금이 특정 상황을 위해 update_attribute를 사용하여 모든 검증 및 기타 콜백을 피할 수 있다는 것을 기억했습니다. 그러나 이것은 전체 큰 시나리오에 대한 실질적인 대답이 아닙니다. 내가 무엇을 놓치고 있습니까?

도움이 되었습니까?

해결책

들어가서 첨부 파일을 약간 해킹하고 다시 작성했습니다. save_attachment? 행동. 거의 새로운 조건을 추가했습니다. 기존 온도 파일 외에도 다음 중 하나는 사실이어야합니다.

  1. 이미지에 대한 파일이 이미 존재하지 않습니다 (사용 full_filename 기인하다).
  2. 이미지 데이터는 다음을 사용하여 명시 적으로 업데이트되었습니다 uploaded_data= 방법.
  3. 이미지는 축소판입니다.

새로운 사진 업로드, 사진 이미지 편집 및 비 이미지 사진 데이터 편집의 세 가지 테스트 사례를 모두 전달하지만 아직 와일드에서는 실제로 테스트하지 않았습니다. 아마 몇 가지 수정을해야 할 것입니다. 우리는 무슨 일이 일어나는지 볼 것입니다.

다른 팁

내가이 주제에서 본 유일한 유용한 스레드는 다음과 같습니다.

http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/709d97e06b373786

Matchu의 솔루션은 아마도 Attachment_FU 코드를 빠르게 검토하여 올바른 솔루션이라고 생각합니다. Matchu가 그의 수정 된 Save_attachment의 패치 나 스 니펫을 공유 할 수 있다면 그것을 좋아합니까? 방법. 나는 이것을 스스로 파헤칠 것입니다. 왜냐하면 이것은 나에게 문제가되었고 아마도 attachment_fu를 완전히 대체하는 것보다 일이 적을 것입니다 ...

업데이트

Matchu의 개요와 함께, 나는 가벼운 테스트 후 작동하는 것으로 보이는 짧은 (무능한) 솔루션을 생각해 냈습니다.

save_attachment를 수정 했습니까? attachment_fu/attder_fu.rb에서 :

def save_attachment?
  return false unless (thumbnail || !full_filename || @active_upload) #added
  File.file?(temp_path.to_s)
end

... Matchu가 배치 된 조건을 확인합니다. 나는 데이터가 uploaded_data = setter 메소드에 전달되었는지 여부를 알 수있는 우아한 방법을 생각해 낼 수 없었습니다. ) 따라서 uploaded_data =에 줄을 추가하여 전역 변수 @Active_upload를 설정했습니다.

def uploaded_data=(file_data)
  return nil if file_data.nil? || file_data.size == 0
  self.content_type = file_data.content_type
  self.filename     = file_data.original_filename if respond_to?(:filename)
  @active_upload=true # added
  if file_data.is_a?(StringIO)
    file_data.rewind
    self.temp_data = file_data.read
  else
    self.temp_path = file_data
  end
end

그것이 도움이되기를 바랍니다. 누군가가 글로벌 변수로 내가 한 일을 처리 할 수있는 더 우아한 방법을 가지고 있다면, 나는 그것을 듣고 싶습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top