Google先生に尋ねたら『file_column』とか『Paperclip』とかあるみたいですが、とりあえず『CarrierWave』を試してみた。
ナウなRails3はこういう場合に何を使うのか、どなたか教えていただきたいっす(´・ω・`)
基本的にCarrierWave の READMEと、『file_column から CarrierWave へ (基本編)』を参考にいろいろ端折ってやってみた。
- 参考サイト
terminal
rails new carrierwave_test
cd carrierwave_test/
GemFile
add
gem 'rmagick' gem 'carrierwave'
terminal
bundle install : rails generate scaffold User name:string avatar:string : rails generate uploader Avatar create app/uploaders/avatar_uploader.rb rake db:migrate
app/uploader/avatar_uploader.rb
# encoding: utf-8 class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick include Sprockets::Helpers::RailsHelper include Sprockets::Helpers::IsolatedHelper storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end process :resize_to_fill => [100, 100] version :thumb do process :resize_to_fill => [50,50] end def extension_white_list %w(jpg jpeg gif png) end end
引用
Sprockets のモジュールを読み込んでいるのは、Rails 3.1.x の Asset Piplineに対応する為です。
2011-11-29 - 篳篥日記
:
一応、「現状、とりあえずこうしておこうか」という対処ですので、この先変更される可能性もあります。
app/models/user.rb
class User < ActiveRecord::Base mount_uploader :avatar, AvatarUploader validates :name, presence: true end
app/views/users/_form.html.erb
<%= form_for(@user) do |f| %> <% if @user.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2> <ul> <% @user.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :name %><br /> <%= f.text_field :name %> </div> <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> <% end %> <%= f.file_field :avatar %><br /> </div> <div class="actions"> <%= f.submit %> </div> <% end %>
app/views/users/show.html.erb
<p id="notice"><%= notice %></p> <p> <b>Name:</b> <%= @user.name %> </p> <p> <b>Avatar:</b> <%= image_tag @user.avatar %> </p> <%= link_to 'Edit', edit_user_path(@user) %> | <%= link_to 'Back', users_path %>
app/views/users/index.html.erb
<h1>Listing users</h1> <table> <tr> <th>Name</th> <th>Avatar</th> <th></th> <th></th> <th></th> </tr> <% @users.each do |user| %> <tr> <td><%= user.name %></td> <td><%= image_tag user.avatar.thumb %></td> <td><%= link_to 'Show', user %></td> <td><%= link_to 'Edit', edit_user_path(user) %></td> <td><%= link_to 'Destroy', user, confirm: 'Are you sure?', method: :delete %></td> </tr> <% end %> </table> <br /> <%= link_to 'New User', new_user_path %>