2

だから私は、CarrierWave アップローダーがあるレール 3.2 アプリに取り組んでいます。これは、画像をアップロードし、それらをいくつかの異なるサイズに分割してトリミングするために使用します-かなり標準的なものです.

私がやりたいことは、アップロードされている画像の上に新しい画像を合成することです。これも非常に簡単です。(透かしのために非常に一般的に行われます)。違いは、合成された画像を配置するための静的な値ではなく、動的である必要があることです。

私が問題を抱えているのは、「バージョン」ブロックで動的なユーザー定義の位置引数を私のcarrierwave プロセッサに渡す方法を考え出すことです。

何か案は?

4

4 に答える 4

13

Rails 4 のちょっとした落とし穴:ファイル入力パラメーターが最初に適切に更新され、アップローダー経由でアクセスできるようにする前に、強力なパラメーターで他のユーザー オプションを許可する必要があります。

于 2014-04-15T02:36:58.830 に答える
4

値をモデルインスタンスに保存できます

次に、モデル属性で取得するためのプロセスメソッドで

# model class
# define attr_accessor coords
class User < ActiveRecord::Base
  attr_accessor :coords
  mount_uploader :icon, AvatarUploader
end



# controller
# pass the params to @user.coords
def crop_icon
  @user.coords = params[:coords]
  @user.icon = params[:icon]
  @user.save
end



# Uploader
# the model in the function is same as @user in controll,
# and can be invoked inside of process method 
 def crop_area
    manipulate! do |img|
      unless model.coords.nil?
        coords = JSON.parse(model.coords)
        img.crop("#{coords['w']}x#{coords['h']}+#{coords['x']}+#{coords['y']}")
      end
      img = yield(img) if block_given?
      img
    end
  end
于 2012-09-10T09:55:55.657 に答える
0

これを掘り出します。

このような引数を渡すことができます

process do_stuff: ["foo", "bar"]

def do_stuff(arg_foo, arg_bar)
  arg_foo == "foo" # => true
  arg_bar == "bar" # => true
end

私見は、モデルをダミーのインスタンス変数で汚染するよりも優れています。

于 2014-01-21T19:36:36.413 に答える