ruby 1.9.2 лямбда-выражение со скрепкой

#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
...
  

это всего лишь пример кода, корректируйте под свои нужды 😉

приветствую, А.