Pergunta

Eu tenho uma pequena aula de "fotos" que contém imagens anexadas.Quando vou para a página para classificar a ordem das fotos, ela percorre cada foto, define o novo valor de "classificação" e salva-a.Tudo bem até agora.

O problema é que notei que esse comportamento é bastante lento.Acontece que attachment_fu recarrega a miniatura a cada salvamento - independentemente de haver ou não novos dados de imagem para trabalhar.

Obviamente que este sistema foi bem pensado, pelo que só me resta assumir que existe uma disposição para esta situação.Como posso dizer ao attachment_fu para não regenerar as miniaturas quando não for apropriado?

Obrigado, --Matchu

Editar: Acabei de lembrar que, para esta situação específica, posso usar update_attribute para evitar todas as validações e outros retornos de chamada.No entanto, esta não é realmente uma resposta viável para todo o grande cenário.o que estou perdendo?

Foi útil?

Solução

Entrou e hackeado um pouco e reescrever o save_attachment? comportamento. Praticamente, adicionei algumas novas condições: além de um arquivo temporário existente, um dos seguintes deve ser verdadeiro:

  1. Nenhum arquivo para a imagem já existe (usando o full_filename atributo).
  2. Os dados da imagem foram explicitamente atualizados usando o uploaded_data= método.
  3. A imagem é uma miniatura.

Ele passa todos os três casos de teste - novos uploads de fotos, editar imagens fotográficas e editar dados de fotos não imagens - mas ainda não testei isso na natureza. Provavelmente terei que fazer algumas correções; veremos o que acontece.

Outras dicas

O único tópico moderadamente útil que vi sobre este tópico está aqui:

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

Acho que a solução do Matchu é provavelmente a correta com uma rápida revisão do código attachment_fu.Eu adoraria se Matchu pudesse compartilhar um patch ou um trecho de seu save_attachment modificado?método.Estou prestes a investigar isso sozinho, já que isso se tornou um problema para mim e provavelmente será menos trabalhoso do que substituir completamente o attachment_fu...

Atualizar

Com o esboço do Matchu, criei uma solução curta (embora deselegante) que parece funcionar após testes leves.

Eu modifiquei save_attachment?em attachment_fu/attachment_fu.rb:

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

...para verificar as condições estabelecidas por Matchu.Não consegui encontrar uma maneira elegante de saber se os dados foram repassados ​​​​para o método setter uploaded_data= (se alguém tiver uma maneira melhor de fazer isso, sou todo ouvidos;Ainda sou um novato em Ruby/Rails), então também adicionei uma linha a uploaded_data= para definir a variável global @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

Espero que ajude, e se alguém tiver uma maneira mais elegante de lidar com o que fiz lá com a variável global, adoraria ouvir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top