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

画像アップローダー(2) carrierwave

2014年07月08日

画像アップローダー(2) carrierwave

■まとめ
rmagicのインストール方法は、こちらを参考に。
記事:「windows7にrmagickをインストールしました。」
今回のコードは、mini_magickでも動いた。
アップローダを生成すれば、その名前(今回はavatar)でMVCを整えていく。
モデル⇒migrationでcolumnを追加してmount。
コントローラ⇒strong-parametersに追加。
ビュー⇒_format.html.erbを適宜修正することで、
     「インスタンス.avater」で画像のURLが取得できる。
     「インスタンス.avater.thumb」でサムネイルのURLが取得できる。
その他にも、
 デフォルトのイメージの設定(def default_url)
 URL指定による画像の取り込み(:remote_avatar_url)
など出来ます。(^o^)v
■アプリ雛形の作成
rails new uploader_carrierwave
cd uploader_carrierwave
vim Gemfile
#gem 'rmagick' # NG ?!
gem 'rmagick', :require => 'RMagick' # 「stack level too deep」対策
#gem 'mini_magick' # rmagickの軽量版
gem 'carrierwave'
bundle install
rails g scaffold user name
rake db:migrate


■carrierwaveの設定
# console
rails g migration add_avatar_to_users avatar:string
rake db:migrate
rails g uploader avatar
# => app/uploaders/avatar_uploader.rb


# app/uploaders/avatar_uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
#include CarrierWave::MiniMagick

storage :file

def default_url
ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
end

version :thumb do
process :resize_to_fill => [50,50]
end

def extension_white_list
%w(jpg jpeg gif png)
end
end



# app/models/user.rb
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
validates :name, presence: true
end


# app/controllers/users_controller.rb
private
def user_params
params.require(:user).permit(:name,:avatar,:remove_avatar)
end


# app/views/users/_form.html.erb
# 追加
<%# form_for @user do |f| %>
<%= form_for @user, :html => {:multipart => true} do |f| %>
# 追加
<div class="field">
<%= f.label :avatar %><br/>
<% if @user.avatar? %>
<%= image_tag @user.avatar.thumb %>
<%= f.hidden_field :avatar_cache if @user.avatar_cache %>
<label><%= f.check_box :remove_avatar %>Remove avatar</label><br/>
<% end %>
URL:<%= f.text_field :remote_avatar_url %><br/>
File:<%= f.file_field :avatar %><br/>
</div>


# app/views/users/show.html.erb
# 追加(抜粋)
<% image_tag @user.avater %>


# app/views/users/show.html.erb
# 追加(抜粋)
<%= image_tag user.avatar.thumb %>


■FAQ
「ActiveRecord::PendingMigrationError 」
rake db:migrateのし忘れ。。。

「Carrierwave undefined method `avatar_changed?' for User」
http://stackoverflow.com/questions/20285552/carrierwave-undefined-method-avatar-changed-for-user

「stack level too deep」
大文字と小文字を区別しないファイルシステム(=windows)で起きるエラーみたい。
Gemfileで「gem 'rmagick', require: 'RMagick'」でOK。
http://qiita.com/eleven_2012/items/eb4099555358b770915b
http://stackoverflow.com/questions/22206350/stack-level-too-deep-when-using-carrierwave-versions





Posted by kanedayo at 16:30│Comments(0)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。