2015-04-07 7 views
0

У меня есть вопрос/проблема - им не совсем понятно, может быть, так оно и должно быть (?)Рельсы 4, несущая волна, миникаг: версия изображения называется каждой загрузкой изображения? (даже не на uplaoad)

Я использую Rails 4 с несущей для загрузки файлов, я просто добавил miniagick gem для создания версий загруженных изображений.

, когда я загружаю изображение - он отлично работает и делает версию.
но когда я загружаю страницу с изображениями, она, кажется, вызывает метод «версия» для каждого изображения, которое отображается на экране .... (и его не процесс загрузки! Только показ изображений!)
Так что даже раньше я загрузил изображение и фактически создал его версию -> я добавил метод «версия» в файл моего загрузчика -> обновил страницу на моем сайте -> метод «version» был вызван (ничего еще не загрузил)

моего файл загрузчик:

class PhotoUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 
    storage :fog 

    version :nav_thumb, if: :is_avatar? do 
    process :resize_to_fit => [50, 50] 
    end 

    version :box_thumb, if: :is_logo? do 
    process :resize_to_fit => [40, 40] 
    end 

    def is_avatar?(picture) 
    mounted_as == :avatar 
    end 

    def is_logo?(picture) 
    mounted_as == :logo 
    end 
end 

, кажется, что каждое изображение, отображаемое на моей странице становится методой is_avatar? (я использовал pry, чтобы посмотреть, что происходит дальше)

и -> это замедляет загрузку моей страницы, что является противоположностью тому, чего я хотел достичь с меньшими версиями изображений.

Это нормальное поведение? следует ли обращаться к методам version при каждом загрузке изображения?
Что мне делать, чтобы исправить это?

спасибо.

+0

Я думаю, что сервис Amazon S3 это лучший способ для загрузки изображения ... – ethan

+0

им загрузки изображений на S3 .... но это не имеет ничего для моей проблемы –

ответ

0

Я думаю, что проблема связана с заполнением логики внутри ваших методов версии. Вместо того, чтобы писать, если заявления внутри них, попытайтесь изменить их к этим:

version :nav_thumb do 
    process resize_to_fit: [50,50] 
end 

version :box_thumb do 
    process resize_to_fit: [40,40] 
end 

, а затем написать дополнительный метод, чтобы определить, какой вариант изображения следует использовать (а затем реализовать результат на ваш взгляд, с image_tag image.image_url(:version)).

+0

причина, по которой я использую логику, заключается в том, что файл-загрузчик предназначен для нескольких классов, и для каждого класса существуют разные версии. я не хочу создавать логотип такого размера для аватара пользователя и наоборот –

0

Попробуйте положить ваши is_*? методы в protected блоке:

... 
version :nav_thumb, if: :is_avatar? do 
    process :resize_to_fit => [50, 50] 
end 

protected 
    def is_avatar?(picture) 
    mounted_as.eql?(:avatar) 
    end 
Смежные вопросы