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のネタをボソボソと書く予定です。
(…しばらく続く気がします…)