Tortoise Shell

Webサービスの会社で働くデザイナーが、デザインやライフハックについてゆるく書き連ねるブログです。

form_tagとform_forの違いが分からず、なんかマイグレーションまでうまくいかなかった

久しぶりに開発を再開。

最近海外ドラマばかり見て開発がおろそかだったので、今日からまたちゃんとやっていきたい。

現状は以下のような感じ。

f:id:tamusan100:20180328230013p:plain

今回は、下記のQiitaを参考にしながら、各投稿に対してタグを付けられるようにしていきたい。 

gem「acts-as-taggable-on」を追加

まずは「acts-as-taggable-on」というgemを追加する。

その後で、gemを使えるようにするために、必要な処理を加えた。

class Tweet < ActiveRecord::Base
  acts_as_taggable
end

rails_consoleを立ち上げて、タグが入るか試してみた。

[1] pry(main)> tweet = Tweet.new(text: 'タグのテストです')
=> #<Tweet:0x007f9634786780 id: nil, text: "タグのテストです", created_at: nil, updated_at: nil, user_id: nil, likes_count: nil>
[2] pry(main)> tweet.tag_list.add('test')
=> ["test"]
[3] pry(main)> tweet.save

「Sequel Pro」でテーブルを見たら、ちゃんと入っていたので一安心。

フォームの実装

あとは、フォームを実装するだけ。これは思っていたよりも簡単にいくか。

…と思っていたけど、問題発生。

既存の投稿画面は「form_tag」で実装してたんだけど、Qiitaでは「form_for」を使って書かれている。

これはどうしたもんか。

<%= form_tag('/tweets', method: :post) do %>
  <h2>投稿する</h2>
  <textarea cols="30" name="text" placeholder="今日はどうだった?" rows="10"></textarea>
  <input type="submit" value="投稿する">
<% end %>

form_tagとform_forの違い

TECH::CAMPでもメンターの方に質問したような気がするけど、もう忘れてしまったし、結局その時もあまり理解できていなかったような気がする。

とにかく、既存の「form_tag」での実装を「form_for」に直すか、その逆のことをしなければならないのだろうか。

 あらためて上記のQiitaを読んだけど、よく分からなかった。いや、理屈としてはわかるけど、実感が持てない。

ちゃんと本質的なところまで理解できていなから、こういうところでつまづいてしまう。

さて、どうしたもんか…。

エラー発生

そんなこんなしている中、気分転換に今のサイトを見ようと思ってリロードしたら、なんかエラーが出ていた。

f:id:tamusan100:20180328231405p:plain

マイグレーションしろって書いてあるから、マイグレーションしたけど、一向に直らない…なぜだ!

このへんも理解が浅くて、「bundle exec」付けるのか付けないのかとか、本当は色々あるけど無視して進んできていたツケた回ってきた感がある。

Gitで今回のタグ実装以前のコミットまで戻してみたらエラーも消えたので、どこかのやり方が悪いんだろうな。

どこなんだろう。なんかもう、色々とツラみしかない。

次回予告

とりあえずエラーを解消するところから。

実はさっきブランチ戻して、Qiitaのとおりもう一度やってみたんだけど、やっぱり同じことになる。

おそらく、自分の開発のコンテキストに合わせて、どれかのコマンドはちょっと変えて実行しなければいけなかったのかもしれない。

エラー自体はググったけど単純なもので、書いてある通りマイグレーションすればいいだけの話っぽいんだけど、やってもダメなのが謎だ。

サーバー再起動するの忘れたとかでもないし、何だろう。

誰か助けてー!