#ruby-on-rails #ruby #ruby-on-rails-3 #lambda #paperclip
#ruby-on-rails #ruby #ruby-on-rails-3 #лямбда #скрепка
Вопрос:
Я обновляю свое рабочее приложение до версии 1.9.2, но не могу найти ответ на следующий :
Я создаю подобный ресурс в своем контроллере :
@asset = Asset.new(params)
и затем в моей модели используйте lambda для динамической генерации стилей следующим образом :
has_attached_file :asset,
:styles => lambda { |attachment| attachment.instance.choose_styles}
Затем я проверяю определенное значение, которое было в моих параметрах, вот так:
def choose_styles
if self.item_name == 'Car'
{ :small => ["200x200>"], :medium => ["400x400>"], :large => ["700x700>"], :full_screen => ["1000x700>"] }
else
........
end
Проблема в том, что имя_элемента равно нулю в 1.9.2 до тех пор, пока это не будет запущено, а затем, похоже, задано из параметров. Все это работает при возврате к версии 1.8.7
Есть ли что-нибудь, что кто-нибудь может увидеть, чтобы помочь мне, пожалуйста??
спасибо Рику
Комментарии:
1. Попробуйте другой синтаксис для lambda, такой как
Proc.new { ...code... }
или синтаксис 1.9 «stabby»-> { ...code... }
2. Это должно работать одинаково в 1.8.7 и 1.9.2. Вы уверены, что нет других различий? Является ли версия gem для скрепок одинаковой в обеих средах? Версия Rails тоже? Другие плагины, которые могут отличаться?
3. Есть решение? Я столкнулся с той же проблемой. Мне кажется, что:styles proc вызывается 7 раз (2 раза перед настройкой любого атрибута). Вывод, основанный на этой сути: gist.github.com/4663975
4. Возникла проблема: github.com/thoughtbot/paperclip/issues/1151
Ответ №1:
Я знаю, что это не тот ответ, который соответствует вашему вопросу. Кстати, вы можете переключиться на carrierwave (https://github.com/jnicklas/carrierwave). Вы можете выбирать форматы более детализированным способом, создавая различные версии и вкладывая их.
В качестве примера, ipothetic AssetUploader может быть:
...
version :thumb_200x200 do
process :resize_to_fill => [200,200]
end
version :big_600x600 do
...
end
...
version :car, :if => in_category(:car)?
version :thumb_200x200
version :another_etc
end
...
protected
def in_category?(name)
model.item_name.downcase == name.to_s
end
...
это всего лишь пример кода, корректируйте под свои нужды 😉
приветствую, А.