
画像アップローダー(1)
2014年07月05日

データベースにそのまま突っ込む方法を試してみました。
画像アップローダーにもいろいろあるようです。
流行ってそうな順番に並べてみると、こんな感じです。
file_column << paperclip < carrierwave
参考URL
http://www.ckazu.info/blog/2013/12/04/image_upload_to_ar_db/
■アプリ雛形の作成
# コマンドラインより
rails new myapp
rails g scaffold user name icon:binary icon_type
vim db\migrate\create_users.rb # => 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
<%= f.file_field :icon %>
■ 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は、インスタンス変数を利用
Posted by kanedayo at 15:28│Comments(0)