Web Marina

日々の業務や勉強などで得た知識をアウトプットしていきます。

CarrierWaveを使い、seedデータに画像を投入する。

f:id:song-of-life1352607:20170221152659j:plain

こんにちは、マリンです。

私のポートフォリオでは一覧と詳細ページに画像を表示する予定です。

でここまでindexshowを作ってきましたが・・・

サンプルデータにはまだ画像のデータが入っていなかったんですね。

多分どハマりすると思ったので後回しにしましたが、

やっぱりどハマりしたのでメモっときます。

やりたかったこと

indexとshowで画像を表示させたい。

やり方

アップローダーにはCarrierWaveを使っています。

ちなみに、未だアップローダーのことがわかっていません。

こっちは表示するだけのアプリだからいるのか?とか思ったのですが・・・

よくわからないし、管理用アプリで使うため心配だから仕様を一緒にしときました。

CarrierWaveの使い方は詳しい記事がたくさんあるので割愛します。

ちなみにこちらを参考にさせていただきました。

チュートリアルは「13.4 マイクロポストの画像投稿」です。 railstutorial.jp

www.workabroad.jp

seedデータ

最初は手動でコンソールからWork.createでやってみたんですがどうにもうまくいかないので、

どっちにしろ必要だからseedデータで作りました。

結論から言いますと、こちらのコードです。

6.times do |index|
  Work.create(name: "Work#{index}",
   contents: "My work#{index}",
   image: File.open("./app/assets/images/home.jpg"))
end

最初はimage:にまんまURLを入れてましたが、

CarrierWave::FormNotMultipart

と出てきてしまってダメでした。

そこで調べて参考にさせていただいたのがこちらです。

xoyip.hatenablog.com

どこぞのファイルを使用する場合には、

opemメソッドをつける必要があったようです。

ハマった点

URLの書き方とか、( )とか細々ハマって時間使っちゃいましたが、

一番はrails db:resetです。

コードを書き直してもこのリセットをせずにそのまま

rails db:seedをしていました。

でもそれではダメなようですね。

あの手この手で色々やってみましたが、結果は全部image: nil

そして今朝、ハッとしてrails db:resetしてからseedデータを投入すると・・・

無事反映されました〜!!

まとめ

夜中に眠い中作業してもやっぱり効率悪いようです・・・