note: did not confirm that on working code
It seems that the block argument is passed: convert_options is already an instance, not an attachment (unlike the styles option, where is that attachment)
Try:
convert_options: lambda { |instance| instance.decide_convert_options }
Btw your code would look much better if you extract the configuration data, for example:
has_attached_file :image, styles: lambda { |attachment| attachment.instance.image_options[:styles] }, convert_options: lambda { |instance| instance.image_options[:convert_options] } IMAGE_OPTIONS = { poster: { styles: { thumb: ["30x45!", :jpg], standard: ["185x278!", :jpg], expanded: ["372x559!", :jpg] big: ["600x900!", :jpg] }, convert_options: { thumb: "-flop", standard: "-flop", expanded: "-flop", big: = "-flop" } }, cover: { styles: { thumb: ["30x45!", :jpg], standard: ["300x1200!", :jpg] }, convert_options: { thumb: "-enhance", standard: "-enhance" } } } def image_options IMAGE_OPTIONS[self.image_class] end
I hope this helps
Update:
It looks like your convert_options are not installed here: https://github.com/thoughtbot/paperclip/blob/a93dfc773b4fd649db4d1281b42a2a71b1ae72ff/lib/paperclip/style.rb#L55
They seem to recommend passing convert_options with styles like in this specification: https://github.com/thoughtbot/paperclip/blob/263a498195d47563a6227be18cf4463c4c6e7903/spec/paperclip/style_spec.rb#L41
Can you try this? therefore, completely remove convert_options, and in your configuration, return the hash, for example:
IMAGE_OPTIONS = { poster: { styles: { thumb: { geometry: "30x45!", format: :jpg, convert_options: '-flop', }, standard: {...} expanded: {...} big: {...} } }, cover: { styles: {...}