初心者向け : Railsログイン機能をつけてQAサイトを作る 4 -タグ付け機能-

初心者向け : Railsログイン機能をつけてQAサイトを作る 4 -タグ付け機能-

初心者向け : Railsログイン機能をつけてQAサイトを作る 1 -ログイン機能+質問機能-
初心者向け : Railsログイン機能をつけてQAサイトを作る 2 -Bootstrap+UI修正-
初心者向け : Railsログイン機能をつけてQAサイトを作る 3 -回答機能+リアクション機能+ベストアンサー機能-
初心者向け : Railsログイン機能をつけてQAサイトを作る 4 -タグ付け機能-
初心者向け : Railsログイン機能をつけてQAサイトを作る 5 -管理画面機能-
初心者向け : Railsログイン機能をつけてQAサイトを作る 6 -検索機能-

今回は質問に対してタグをつけることができるようにします

質問内容が

  • 動物
  • 食べ物
  • スポーツ

などわかりやすくするための機能です

 

データベース関係性

データベースの関係性はこのような形となります

通常であれば、Question modelからTag modelをhas_manyにして
たくさんのタグを作成したいところですが、
タグはQuestionを作成するユーザーごとに違うものを適用するか、
それとも全てのユーザーが同じタグを利用して管理をしやすくする、
どちらが良いでしょうか?

保守面で考えると後者が間違いなく便利です
なのでほとんどのシステムでは同じタグを質問ごとに紐づける
多対多というデータベースのリレーションが行われています

今まではQuestionに紐づくAnswersを全て取得して表示していました
これは一対多です。

多対多とはTagとQuestionがそれぞれ複数要素を持ち合っている状態です
複数持ち合うには、デーブルとテーブルの間にさらにテーブルを作成して
そこへTagのidとQuestionのidを入れておくことで関係性を持たせることができます

※テーブルとテーブルの間のテーブルのことを中間テーブルと呼びます
慣習として、テーブル(Question)とテーブル(Tag)の名前をつけることがあり、
今回はQuestionTagと名前をつけました。

 

TagとQuestionTag modelを作成する

いつも通りscaffoldで作りたいところですが、
コントローラーやhtml等は必要ないので、modelのみで行きます

次はモデルにリレーションを与えていきます

question.rb

tag.rb

question_tag.rb

最後にデータベースを適用させます

 

Tagにデータを追加する

コンソールでデータを追加します
結果の部分は見にくくなってしまうので削除しました

こんな感じでデータを4つぐらい登録して、最後に確認を行いましょう

無事にデータが入ってます

 

Questionコントローラーとviewsに適用する

new, edit question_paramsを修正

views/questions/_form.html.erbをこのように修正

修正後、質問画面ではタグを選択できるようになっています

 

それでは適当にデータを作成して保存してみましょう
※必ずどれかのタグにチェックを入れてください

次はタグを確認できるように修正します

views/questions/show.html.erb
全部表示すると長くなるので、header部分のみ表示しています
これ以外には修正はありません

それでは確認しましょう

タグ追加後はタイトルのすぐ下にタグが表示されています!

ちなみにこのタグですが、複数追加すれば複数で表示されます

 

これでタグ追加機能は完了ですが、
タグ機能は検索できてこそ意味があります。
ransackなどのgemを利用すれば比較的簡単にできるので
自分の力だけでやってみましょう!

Railsカテゴリの最新記事