2016-12-01 18 views
0

からupload.html.erb画像とクロップ情報(x座標とy座標、幅と高さ)を含むフォームをupdate_imageというコントローラメソッドに送信します。この情報をモデルに渡して(picture.rb)、この画像を切り取って保存します。ペーパークリップの条件付きスタイル

私は画像を保存するためにRails 5とPaperclipを使用しています。私は解決できないように思われる次の2つの問題に遭遇しました:

  1. 私のモデル内の作物情報データへのアクセス方法?私は作物の情報をデータベースに保存したくありません。
  2. 画像を切り抜く方法作物情報がある場合は? (私は作物機能を持たない別のフォームからの通常のファイルアップロードに同じモデルを使用したい)

助けてくれると助かります!

upload.html.erb

<form action="/update_image" enctype="multipart/form-data" accept-charset="UTF-8" method="post"> 
    <input type="file" name="image" /> 
    <input type="hidden" name="crop_x" value="0" /> 
    <input type="hidden" name="crop_y" value="5" /> 
    <input type="hidden" name="crop_width" value="200" /> 
    <input type="hidden" name="crop_height" value="100" /> 
</form> 

upload_controller.rb

def update_image 
    picture = Picture.new(image: params[:image]) 
end 

picture.rb

class Picture < ActiveRecord::Base 
    has_attached_file :image, styles: { 
    cropped: "-crop #{@crop_w}x#{@crop_h}+#{@crop_x}+#{@crop_y}", 
    thumb: "100x100>" 
    } 
end 

答えて

1

あなたがいますダイナミックなスタイルを探しています。あなたはトリミングする必要がコントローラから

class Picture < ActiveRecord::Base 
    attr_accessor :crop_needed 
    has_attached_file :image, styles: Proc.new { |clip| clip.instance.attachment_sizes } 

def attachment_sizes 
    crop_needed ? { 
     cropped: "-crop #{@crop_w}x#{@crop_h}+#{@crop_x}+#{@crop_y}", 
     thumb: "100x100>" 
    } : {thumb: "100x100>"} 
end 
end 

def update_image 
    picture = Picture.new 
    picture.crop_needed = true if params[:crop_x].present? 
    picture.image = params[:image] 
    picture.save 
end 

をあなたはトリミングを必要としない他のコントローラからは、単にfalseにcrop_neededを設定します。

関連する問題