Rails 4 - 使用自定义回形针附件处理器解析param的顺序

时间:2015-01-23 11:21:48

标签: ruby-on-rails image paperclip

我有一个带有回形针图像附件的内容表以及一些用户选择的裁剪设置:

create_table "content", force: true do |t|
    t.string   "title"
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
    t.datetime "image_updated_at"
    t.integer  "crop_x"
    t.integer  "crop_y"
    t.integer  "crop_w"
    t.integer  "crop_h"
end

为了在服务器端处理用户指定的图像裁剪,我有一个自定义的回形针处理器,我从here采购:

module Paperclip
  class CustomCropper < Thumbnail
    def initialize(file, options = {}, attachment = nil)
      super
      @current_geometry.width = target.crop_w
      @current_geometry.height = target.crop_h
    end
    def target
      @attachment.instance
    end
    def transformation_command
      crop_command = [
          '-crop',
          "#{target.crop_w}x" \
          "#{target.crop_h}+" \
          "#{target.crop_x}+" \
          "#{target.crop_y}",
          '+repage'
      ]
      crop_command + super
    end
  end
end

我的问题是,在图像附件之后,解析了crop_x,y,w,h params,因此自定义回形针处理器对所有字段都看不到nil并且不会裁剪图像正常。

# rails processes the image_xxx params before the crop_xxx params
@content = Content.new(content_params)

是否有一种干净的方式告诉Rails在附件图像之前处理裁剪边界字段?或者是否有一个基本上可以实现此目的的不同解决方案?

1 个答案:

答案 0 :(得分:2)

对于我的生活,我无法弄清楚&#34;清洁&#34;办法。我最终做的是在使用附件调用更新/保存之前保存crop_值。

例如:

def update

  if article_params[:image_crop_y].present?
    @article.image_crop_y = article_params[:image_crop_y]
    @article.image_crop_x = article_params[:image_crop_x]
    @article.image_crop_w = article_params[:image_crop_w]
    @article.image_crop_h = article_params[:image_crop_h]
    @article.save
  end

  if @article.update(article_params)
    ...
  end

end
像我说的那样,不是&#34;最干净的&#34;方式,但它对我有效。