Rails 3:Paperclip条件样式过早初始化

时间:2012-05-10 01:32:56

标签: ruby-on-rails-3 forms paperclip

Paperclip在处理表单参数之前初始化样式,从而忽略了我指定自定义调整大小的尝试。

型号:

    attr_accessor :new_width, :new_height        

    has_attached_file :attachment,
      styles: lambda { |attachment| attachment.instance.set_styles }
      ...

    def set_styles
      # Default thumb:
      styles = { thumb: '100x100>' }

      # Resize original if new sizes have been specified
      if new_width and new_height
        styles[:original] = "#{new_width}x#{new_height}>"
      end

      styles
    end

我可以通过日志文件看到定义了样式,convert命令在new_widthnew_height被赋予控制器传递的值之前触发。

Rails服务器日志文件:

    {:thumb=>"100x100>"} # logger.info in the model
    ...
    # Command :: convert ... etc
    # [paperclip] Saving attachments.
    ...
    {:thumb=>"100x100>", :original=>"300x300>"}  # logger.info in the model

自定义维度分配给实例时,Paperclip已触发ImageMagick命令。

如何在处理图像之前将自定义尺寸传递给Paperclip以定义样式?

1 个答案:

答案 0 :(得分:0)

在保存模型之前,您是否尝试在模型中使用回调来计算宽度和高度?

before_save :set_styles

在附件的回形针文档中,回形针附件会在模型保存并在分配时处理文件时保存。