CarrierWaveを使い、seedデータに画像を投入する。
こんにちは、マリンです。
私のポートフォリオでは一覧と詳細ページに画像を表示する予定です。
でここまでindex
とshow
を作ってきましたが・・・
サンプルデータにはまだ画像のデータが入っていなかったんですね。
多分どハマりすると思ったので後回しにしましたが、
やっぱりどハマりしたのでメモっときます。
やりたかったこと
indexとshowで画像を表示させたい。
やり方
アップローダーにはCarrierWaveを使っています。
ちなみに、未だアップローダーのことがわかっていません。
こっちは表示するだけのアプリだからいるのか?とか思ったのですが・・・
よくわからないし、管理用アプリで使うため心配だから仕様を一緒にしときました。
CarrierWaveの使い方は詳しい記事がたくさんあるので割愛します。
ちなみにこちらを参考にさせていただきました。
チュートリアルは「13.4 マイクロポストの画像投稿」です。 railstutorial.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
と出てきてしまってダメでした。
そこで調べて参考にさせていただいたのがこちらです。
どこぞのファイルを使用する場合には、
opem
メソッドをつける必要があったようです。
ハマった点
URLの書き方とか、( )とか細々ハマって時間使っちゃいましたが、
一番はrails db:reset
です。
コードを書き直してもこのリセットをせずにそのまま
rails db:seed
をしていました。
でもそれではダメなようですね。
あの手この手で色々やってみましたが、結果は全部image: nil
。
そして今朝、ハッとしてrails db:reset
してからseedデータを投入すると・・・
無事反映されました〜!!
まとめ
夜中に眠い中作業してもやっぱり効率悪いようです・・・