てぃーだブログ › Ruby 勉強会 › 画像アップローダー(1)

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

2014年07月05日

rails画像アップロード

データベースにそのまま突っ込む方法を試してみました。
画像アップローダーにもいろいろあるようです。
流行ってそうな順番に並べてみると、こんな感じです。
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)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。