rails　ユーザー画像アップロードの手順

#gemのインストール

```lang:gemfile

gem 'carrierwave'
gem 'rmagick'
```
rmagickはサイズ調整に必要。
アップロードされる画像を特定のサイズに調整して保存してくれる。

2016.7/28追記: 
rmagick入れる時にエラーが出る方へ。
自分もvagranｔのCentOS７でやろうとしたら以下のエラーでた。

```
Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
	ERROR: Failed to build gem native extension.

    /home/vagrant/.rbenv/versions/2.1.2/bin/ruby extconf.rb
checking for gcc... yes
checking for Magick-config... no
checking for pkg-config... yes
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
checking for outdated ImageMagick version (<= 6.4.9)... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/home/vagrant/.rbenv/versions/2.1.2/bin/ruby

extconf failed, exit code 1

Gem files will remain installed in /home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rmagick-2.15.4 for inspection.
Results logged to /home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0-static/rmagick-2.15.4/gem_make.out
```

この時は、
`$ sudo yum -y install ImageMagick`
`$ sudo yum -y install ImageMagick-devel`
`$ gem install rmagick`
このコマンドを打ってからbundle install すれば行けると思います。


#アップローダーの作成
$ rails g uploader image
     app/uploaders/image_uploader.rb　の作成

#usersのカラムにimageを追加
$ rails g migration add_image_to_users image:string


#Userモデルにこれを追加
```lang:user.rb
 mount_uploader :image, ImageUploader
```

#UserControllerのstrong parameterに:imageを追加

```lang:users_controller.rb

private
  def user_params
    params.require(:user).permit(:name, :email,,:password, :password_confirmation, :image, :remember_digest)
  end
```


#アップローダーの設定の変更
```lang:image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base  

 # リサイズしたり画像形式を変更するのに必要
  include CarrierWave::RMagick

 # 画像の上限を200pxにする
   process :resize_to_limit => [200, 200]

  # 保存形式をJPGにする
  process :convert => 'jpg'

  # サムネイルを生成する設定
   version :thumb do
     process :resize_to_fill => [40, 40, gravity = ::Magick::CenterGravity]
   end

  # jpg,jpeg,gif,pngしか受け付けない
  def extension_white_list
    %w(jpg jpeg gif png)
  end

 # 拡張子が同じでないとGIFをJPGとかにコンバートできないので、ファイル名を変更
  def filename
    super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
  end



end
```


#_form.html.erbでフォームを作成する
```lang:_form.html.erb

    <%= form_for(@user) do |f| %>
      <%=f.label :image,"ユーザー画像" %>
      <%= f.file_field :image %>
    <% end %>
  </div>
</div>
```


#表示させる
```lang:edit.html.erb

<%= form_for @user,:url => {:action => 'update'}, :html => {:multipart => true} do |f| %>

  <%= f.file_field :image %><br>
  <%= f.submit %>

<% end %>

```


```lang:users_controller.rb

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @tweets = @user.tweets.all
  end

  def edit
    @user = User.find(params[:id])
  end

 def update
   @user = User.find(params[:id])
   if @user.update(user_params)
     redirect_to user_show_path(@user)
  else
    render :edit
  end
 end

  private

  def user_params
    params.require(:user).permit(:name, :email, :profile, :image)
  end
end
```