nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

paperclip_database の導入メモ

はじめに

  • ActiveRecord のオブジェクトに画像ファイルを添付する gem の Paperclip で、画像の保存先をデータベースにする gem の paperclip_database の導入メモ。
  • Paperclip は導入済みで、User モデルの avatar カラムに添付画像情報を入れているものとする。

バージョン

  • Rails 4.2
  • Paperclip 4.2.1
  • paperclip_database 2.3.1

インストール

  • Gemfile
gem "paperclip_database", "~> 2.0"
  • インストール
bundle install

マイグレーションファイルの作成と実行

rails generate paperclip_database:migration User avatar
rake db:migrate

モデルの設定

  • :storage オプションを追加する
has_attached_file :avatar, :storage => :database

画像を返すアクションとルートの作成

ルートの作成

  • routes.rb で users リソースが定義済みの場合、member でルートの追加
resources :users do
  member do
    get :avatars
  end
end

アクションの作成

  • UsersController で paperclip_database のコントローラ拡張ミックスインのインポートと画像返却用のアクション定義メソッドの追記
class UsersController < ApplicationController
  include Paperclip::Storage::Database::ControllerClassMethods
  downloads_files_for :user, :avatar

テンプレートで画像の呼び出し

  • @user.image.url(:style) だと URL エンコード済みの文字列が出てきてしまうので、普通にルート名で URL を指定する。
<% image_tag(images_user_url(@user, :style => :medium)) %>