avosalmonのブログ

プログラミングやWebデザイン、DTMについて調べたことをメモってます。プログラマー兼ベーシストです。

【Rails】PaperClip + active_adminで画像をアップロード

PaperClipを使うためにはImageMagikが必要なので、インストールされていない場合はインストールする。

# MacのHomeBrewでインストールする場合
brew install imagemagick
Gemfile
gem 'paperclip', '~> 4.1'
Migration

rails g migration AddFileUploadToItemImages

class AddFileUploadToItemImages < ActiveRecord::Migration
  def change
    add_attachment :item_images, :image
  end
end
Model
has_attached_file :image,
                    :styles      => { :medium => "300x300>", :thumb => "100x100>" },
                    # 1つのモデルが複数の画像をもつ(has_many)場合、下記の指定が必要らしい
                    :path => ":rails_root/public/system/:attachment/:id/:style/:filename",
                    :url => "/system/:attachment/:id/:style/:filename"

validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
ActiveAdmin
app/admin/item_image.rb

# permit_paramsで添付ファイルのフィールド名(今回はimage)を追加
permit_params :name, :item_id, :image

form do |f|
  f.inputs "アイテム画像" do
    f.input :item
    f.input :name
    f.input :image, :as => :file, :hint => f.object.new_record? ? "" : f.template.image_tag(f.object.image.url(:thumb))
  end
  f.actions
end

show do |item_image|
  attributes_table do
    row :name
    row :item
    # show画面で画像を表示するためのタグを追加
    row :image do
      image_tag(item_image.image.url(:medium))
    end
  end
end


こんな感じで画像をアップロードできるようになりました。
f:id:avosalmon:20140622122300p:plain


参考記事
Paperclip with Rails4 and active admin
RailsでPaperclipを使ってみたメモ [俺の備忘録]
Rails4+Paperclip+ActiveAdminのメモ - Qiita