Ruby on Rails (3.x >= 3.2.9) のためのブログです (どっちかというと社内ブログ的な感じで、基礎から書いてきます) 。
12月
20
Comments


Railsで、「ファイルをアップロードし、そのファイルのパスをデータベースに保存する」という処理を行いたい場合、CarrierWave を使えばできます。

① CarrierWave をインストール


まず、Gemfileに以下を追加
  1. gem 'carrierwave' # これを追加  
次に、以下のコマンドを実行

$ bundle install



② アップロード用のクラスを作成する

  1. $rails generate uploader image  

このコマンドを実行すると、app/uploaders/image_uploader.rb (ImageUploaderクラス) が作成されます


③ 画像アップロード用に、モデルを定義


images というテーブル (モデルはImage) に、imagename というカラム名で、ファイル名を管理するとします。


つまり、imagename は string型 としてmigrationしてあげればOKです。


このテーブルに対するモデルを以下のように定義します。
  1. class Image < ActiveRecord::Base  
  2.   attr_accessible :imagename  
  3.   mount_uploade :imagename, ImageUploader  
  4. end  
これで、アップロード成功時に同時にDBへの保存も行われるようになります。


④ 実際にアップロードしてみる


ほとんどの解説ブログなどでは、モデルと結びついたフォーム (form_for) を利用しているので、ここでは、そうでない場合のやり方で書いてます (form_tag利用)
コントローラーは以下
  1. class UploadTestController < ApplicationController  
  2.   def upload  
  3.     unless params[:photoname].nilthen  
  4.       image = Image.new  
  5.       image.imagename = params[:imagename]  
  6.       image.save # ここでアップロード処理とDB保存処理が走る  
  7.     end  
  8.   end  
  9. end  
ビューは以下 (upload.html.erb)
  1. <%= form_tag  '/upload_test/upload/':multipart => true do %>  
  2. <%= file_field_tag :photoname %>  
  3. <%= submit_tag 'upload' %>  
  4. <% end %>  
これでOKです。

Categories: , , ,

Leave a Reply