CarrierWave + seed

こんにちは。
麺処まつば副店長です。
今日も真面目に勤務しております。(店長へのアピール)

さて、本日は前回の予告通り
CarrierWaveについて、ボソボソと書いてみようと思います。

まず、CarrierWave?なにそれ美味しいの?ていう方はコチラへどうぞ
<CarrierWave>
https://github.com/jnicklas/carrierwave
<RailsCastによる分かりやすい説明>
http://railscasts.com/episodes/253-carrierwave-file-uploads?language=ja&view=asciicast


CarrierWaveの使い方等は既に分かりやすい記事等沢山あると思いますので…
今回は、CarrierWaveを適用したモデルのデータを
seedを使って投入する方法をまとめてみようと思います。

今回のディレクトリの構造はこんな感じです。

[RAILS_ROOT]
  ┣ app
  ┃ ┣ models
  ┃ ┃  ┗ soba.rb
  ┃ ┗ uploaders
  ┃     ┗ soba_image_uploader.rb
  ┃
  ┗ db
     ┣ data
     ┃  ┣ zarusoba.jpg
     ┃  ┣ morisoba.jpg
     ┃  ┗ tempurasoba.jpg
     ┗ seeds.rb

sobaモデルというのがあって、
その中でsoba_image_uploaderなるアップローダを使うよう指定をしています。
そして、db/dataの中に画像ファイルを3枚と、db/seeds.rbを用意します。

app/models/soba.rb

  1 # -*- encoding: UTF-8 -*-
  2 class Soba < ActiveRecord::Base
  3
  4   mount_uploader :image, SobaImageUploader
  5

上記のように、sobas.imageでUploaderを使うよう指定しています。

sobasテーブル

また、sobasテーブルは下記のような構成になっているとします。

mysql> desc sobas;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(255) | NO   |     | NULL    |                |
| image        | varchar(255) | NO   |     | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

db/seeds.rb

sobasテーブルに値を放り込むために、下記のようなseeds.rbを書きます。

 1 # -*- encoding: UTF-8 -*-   
 2 Soba.find_or_create_by_name(name: 'zarusoba', image: open("#{Rails.root}/db/data/zarusoba.jpg"))
 3 Soba.find_or_create_by_name(name: 'morisoba', image: open("#{Rails.root}/db/data/morisoba.jpg"))
 4 Soba.find_or_create_by_name(name: 'tempurasoba', image: open("#{Rails.root}/db/data/tempurasoba.jpg"))

この状態で、下記コマンドをたたきます。

$ rake db:seed

…とすると、ファイルも一緒に保存ができました。
いやぁ便利ですね。
これで当店のメニューも簡単に生成できます…!(ちらっちらっ>店長)


次回もCarrierWaveのネタをボソボソと書く予定です。
(…しばらく続く気がします…)