file_columnプラグインを使ってみる・前

ということで、まただいぶ間を空けてしまってますが。
自分の復習の意味も込めて、画像処理周りのことをまとめます。
前回、RMagickはインストールしたので、そこからどうプログラムに落としていくかのメモ。

プロジェクト作成からテーブル設計まで

まずは、おなじみ。サンプル用お題から。
画像の扱いってことなので、画像管理サイトもどきにしてみます。

イメージとしては、mixiのフォトアルバムみたいなの(わからない人ごめんなさい)。
単純に画像が貼り付けられて、その画像についてのコメントが書ける、というレベルのもの。

プロジェクト作成については、コマンドたたくなり、Aptanaなどのエディタを使うなりで適当に。

テーブルはこんなのを作ってみました。

MySQL:
  1. CREATE TABLE `images` (
  2.   `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `image` VARCHAR(255) NOT NULL,
  4.   `comment` VARCHAR(50) NOT NULL,
  5.   `created_at` DATETIME,
  6.   `updated_at` DATETIME,
  7.   PRIMARY KEY (`id`)
  8. )
  9. ENGINE = INNODB;

ついでに、created_at・updated_atとやると、登録・更新の際、Railsが勝手に入れてくれるらしいので、一緒に試してみます。

scaffoldからfile_columnプラグインのインストールまで

テーブル設計が終わったので、早速scaffoldしてしまいます。
この辺はもはや説明するまでもないですね。
これまた、適宜自分に一番しっくりしたやり方で作成します。
すると、こーんな感じになるはずですね。

最初の状態

次に、file_columnプラグインをインストールします。
Aptanaだと、Railsプラグインというビューがエディタにあるはずなので、そこから「File Column Plugin」という奴を選択してインストールすればOKです。
コマンドだと、

CODE:
  1. ruby script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/trunk

ですね。

単純に実行しただけだと、vendor/pluginsの配下にtrunkというディレクトリでできてしまうので、trunkの名前を「file_column」など、わかりやすい名前に変えてしまうとよいでしょう。

実際に使うところまで

プラグインをインストールしたところで、今度は実際に画像がアップロードできるところまで持って行きます。
上の画像の状態だと、アップロードできそうな気配は1ピクセルもありませんので。

まずは、先ほどscaffoldで作った、app/modelsにあるimage.rbに以下のコードを書き加えます。

RUBY:
  1. class Image <ActiveRecord::Base
  2.  
  3.   # 画像保存処理の設定
  4.   file_column :image,
  5.               :magick => {
  6.                 :versions => {
  7.                   :thumb => {:size => "240x320>"}
  8.                 }
  9.               }
  10.  
  11. end

「file_column」でプラグインを適用するカラム名、「magick」でオプションをつけます。
今回は、オリジナル画像を保存するほかに、サムネイル用の画像(:thumb)を保存し、そのときのサイズは「240×320」。「ただし、それより小さい画像はそのままとする」。
という設定になっています。
sizeのところの書き方は、ほかにもいくつかありますので、詳細はここを参考にするとよい感じです。

次に、viewを直します。
_form.rhtmlの5行目。imageカラムのところを変えます。
ついでに、作成日と更新日は消してしまいます。

HTML:
  1. <%= error_messages_for 'image' %>
  2.  
  3. <!--[form:image]-->
  4. <p><label for="image_image">Image</label><br />
  5. <%= file_column_field 'image', 'image'  %></p>
  6.  
  7. <p><label for="image_comment">Comment</label><br />
  8. <%= text_field 'image', 'comment'  %></p>
  9. <!--[eoform:image]-->

続いて、これだけだと、アップロードができないので、new.rhtmlとedit.rhtmlもこう直します。

HTML:
  1. <%- form_tag ({:action => 'create'}, :multipart => true) do %>
  2.   <%= render :partial => 'form' %>
  3.   <%= submit_tag "Create" %>
  4. <%- end %>

HTML:
  1. <%- form_tag ({:action => 'update', :id => @image}, :multipart => true) do %>
  2.   <%= render :partial => 'form' %>
  3.   <%= submit_tag 'Edit' %>
  4. <%- end %>

すると、こんな感じに。
ちなみに、プラグインをインストールした後は、きちんとサーバーを再起動させてください。
でないとNoMethodErrorが出ちゃいます。

修正後の状態

おお。いい感じですね^^
ためしに登録してみると、これであっさりとうろくできちゃいます。
さりげなく、登録日も更新日も勝手に入ってくれてますね。

じゃあ、できたものを早速確認してみます。

orz

……orz

確かに画像はアップロードできているらしい(プロジェクトを更新してみると、うまいこと中にファイルが格納されてます)
画像が表示できるところまで行くには、もうちょっと努力が必要みたいです。
長くなってきたので、もうちょっとつづく。

Via:

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加 |

1 Response to “file_columnプラグインを使ってみる・前”


  1. 1 file_columnプラグインを使ってみる・後 at Katawara.*

Leave a Reply