画像アップローダー(1)

kanedayo

2014年07月05日 15:28



データベースにそのまま突っ込む方法を試してみました。
画像アップローダーにもいろいろあるようです。
流行ってそうな順番に並べてみると、こんな感じです。
file_column iconサイズの変更
# t.binary :icon,limit: 1.megabyte
rake db:migrate


■ _form.html.erb
# 画像(icon)は、フィールド形式をf.file_fieldに変更。
# 画像形式(icon_type)は、削除。(コントローラで自動取得するため)
 # app/views/users/_form.html.erb



■ routes.rb
# 画像表示のためのルーティングを定義
 # config/routes.rb
# icon_user GET /users/:id/icon(.:format) users#icon
resources :users do
member { get :icon }
end


■ users_controller.rb
# user_paramsから画像ファイルとその形式を取得。
# Strong Parametersの調整
# users#iconの追加
# app/controllers/users_controller.rb
before_action :set_user, only: [:show, :edit, :update, :destroy, :icon] # :icon を追加

def create
@user = User.new(user_params)
@user.icon = params[:user][:icon].read # 画像取得
@user.icon_type = params[:user][:icon].content_type # 画像形式取得
# 省略
end

def icon # 画像表示用のアクション
send_data(@user.icon, type: @user.icon_type, disposition: :inline)
end

private
def user_params
params.require(:user).permit(:name) # :icon, :icon_type を削除
end


■ {index,show}.html.erb
# 画像表示のための変更
# app/views/users/{index,show}.html.erb
image_tag icon_user_path(user) # indexは、@users.eachの中のインスタンス変数
image_tag icon_user_path(@user) # showは、インスタンス変数を利用